我有两个静态库和一个 macOs 应用程序(都在最新的XCode 8.1下)。
1)第一个库( A )是 ObjC++ (混合objc和c++ / STL)
2)第二个( B )是纯 ObjC ,并包含一些常见类别(例如,对于NSObject)
3)该应用程序是Swift,并且同时使用两个库
所有目标都使用相同的c++标志(libc++ 11等)构建,问题是:
1)如果我将 -ObjC (和/或) -load_all 链接器标志添加到应用程序(与lib B 类别进行正常链接),那么我会得到许多“ undefined symbol ,用于体系结构x86_64”(全部)关于STL)
2)如果我删除此链接器标志,则应用程序可以正常编译,但是在运行时,我得到了所有lib B 类别的“缺少选择器”。
但是,如果我完全删除lib B (直接将其所有源直接添加到应用程序中)并分别删除 -ObjC / -load_all ,那么解决了STL链接的问题,但是很遗憾这不是我的正确选择。因此,希望对您有所帮助,或者至少是对您的解释。
谢谢!
最佳答案
将-lc++
(标准C++库)附加到应用程序Other Linker Flags
中的Build Settings
中,看看是否可以解决问题。在不了解您的应用程序和库的情况下,我不确定这是怎么回事,但是我推测,当添加-ObjC
时,会导致从libB
加载其他代码,那么就需要使用标准C++库中的某些符号,无法使用。
或者,您可以在应用程序libc++.tbd
的Link Binary With Libraries
部分中添加Build Phases
。单击该部分中的+号后,将在出现的框架和库列表中提供该功能。