我有两个静态库和一个 macOs App(全部都在最新的XCode 8.1下)。
1)首先是lib( A ), ObjC ++ (混合objc和c ++ / stl)
2)第二个( B )是纯 ObjC ,并且包含一些常见类别(例如对于NSObject)
3)应用程序是Swift并使用两个库
所有目标都使用相同的c ++标志(libc ++ 11等)构建,问题是:
1)如果我将 -ObjC (和/或) -load_all 链接器标志添加到 App (与lib的正常链接< strong> B 类别),然后我得到了很多&#34; 未定义的符号,用于架构x86_64 &#34; (关于STL)
2)如果我删除了这个链接器标志,那么 App 编译正常,但在运行时我没有&#34; 缺少选择器&#34;对于所有lib B 类别。
但是,如果我完全删除lib B (直接在 App 中添加所有来源)并分别删除 -ObjC / < strong> -load_all ,然后解决了STL链接的问题,但不幸的是,这对我来说不是正确的选择。所以我希望得到你的帮助,或者至少是对你的解释。
谢谢!
答案 0 :(得分:1)
将-lc++
(标准C ++ lib)附加到应用的Other Linker Flags
中的Build Settings
,看看是否能解决问题。在不了解您的应用和库的更多信息的情况下,我不确定发生了什么,但我推测在添加-ObjC
时会导致libB
的其他代码被加载,然后需要一些标准C ++库中的符号,但不可用。
或者,您可以在应用的libc++.tbd
的{{1}}部分添加Link Binary With Libraries
。当您单击该部分中的+号时,它出现在框架和库列表中。