我问过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时,我需要使用哪种魔术标记?