如何将静态库嵌入共享库-在OSX上

时间:2019-05-23 04:54:37

标签: macos linker static-linking dynamic-linking

我问过this question on linux,但现在我需要有关macOS的相同信息...问题是(适应于macos):

我正在尝试创建一个共享库libbar.dylib,该库嵌入了一个商业静态库(可以使用许可)。商业库具有4个版本:libfoo-seq.a,libfoo-mt.a,libfoo-seq.dylib和libfoo-mt.dylib(它们都提供相同的符号,只是代码是顺序/多线程的,并且该库是静态/共享的)。在这四个文件中,我希望我的代码始终使用顺序的foo库,因此在创建libbar.dylib时,我将目标文件和libfoo-seq.a链接在一起。

问题是我的库用户可能在他们拉进我的libbar.dylib时就已经拉进了libfoo-mt.dylib,因此在读入libbar.dylib时,来自libfoo的所有符号已经存在,因此我对foo中函数的调用被解析为多线程版本。至少我认为这正在发生。有什么办法可以再次检查吗?

如果这确实在发生,我想知道如何解决此问题?在编译以创建目标文件以及将目标文件与libfoo-seq.a链接以创建libbar.dylib时,我需要使用哪种魔术标记?

0 个答案:

没有答案