【发布时间】:2019-05-20 15:04:36
【问题描述】:
在 linux 上,我正在尝试创建一个共享库 libbar.so,它嵌入了一个商业静态库(许可很好)。商业库有 4 个版本:libfoo-seq.a、libfoo-mt.a、libfoo-seq.so 和 libfoo-mt.so(它们都提供相同的符号,只是代码是顺序/多线程的,并且该库是静态/共享的)。在这四个中,我希望我的代码始终使用顺序 foo 库,所以当我创建 libbar.so 时,我将我的目标文件和 libfoo-seq.a 链接在一起。
问题是我的库的用户在他们拉入我的 libbar.so 时可能已经拉入了 libfoo-mt.so,因此在读入 libbar.so 时来自 libfoo 的所有符号都已经存在,所以我对 foo 中函数的调用被解析为多线程版本。
我想知道如何解决这个问题?当我编译创建目标文件以及将目标文件与 libfoo-seq.a 链接以创建 libbar.so 时,我需要使用什么样的魔法标志?
【问题讨论】:
标签: linux linker static-linking dynamic-linking undefined-symbol