7
|
Georg Schölly Crazy Developer · 技术社区 · 15 年前 |
![]() |
1
8
这假定您拥有所有共享对象的源代码: 如果没有名称空间冲突(如果两个名称空间是共存的,就不应该有冲突),那么将它们构建成一个共享对象就不会太难了。 如果共享库本身依赖于另一个库的代码,那么顺序就很重要了。真正的工作就是在makefile中计算出依赖项。我从来没有在so的成功链接中看到过循环依赖,所以我怀疑您是否需要从它们开始。即foo()依赖于bar(),而bar()依赖于foo()。 我已经做了好几次了,尽管图书馆本身并不重要。我从USTR(字符串处理程序)、配置文件处理程序、其他一些自定义解析器和其他实用程序函数中获取了部分内容,并创建了一个自定义混搭。 真正的痛苦是,一旦你把它们结合起来,就会带来上游的改进,但是我不确定这是否是你的问题。 所以如果你有:
在哪里?
…而且顺序是正确的。剩下的很容易。注意,我没有显示标题deps,每个人都有点不同。但是,在进行mash-ups时,它们很重要,因为您可能希望避免每次更改一个头时重新编译整个库。 NB: 如果这三个项目都使用自动工具…你的任务只是成倍地容易(或难)取决于。 如果您没有源代码 如果每个库都有静态版本,则可以提取对象并使用它们。即。:
当然,这比图示要复杂得多。 我从未尝试过,也不知道如何处理在这种情况下链接时具有main()的sos。 |
![]() |
S1mple · 通过gcc生成64位共享库时的“未定义的主引用” 3 年前 |
![]() |
hepl · gcc如何决定在创建可执行文件时使用dynamics库? 3 年前 |
![]() |
Altair · 使用共享库版本支持不同ABI的最佳实践是什么? 7 年前 |
![]() |
user2577547 · 如何将zstd库静态链接到动态库? 7 年前 |
![]() |
arc_lupus · 阻止从其他程序执行库中的函数 7 年前 |