混合macOs应用程序与静态库的链接错误(swift,objc,c ++)

时间:2016-11-12 12:32:36

标签: c++ objective-c xcode macos linker

我有两个静态库和一个 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链接的问题,但不幸的是,这对我来说不是正确的选择。所以我希望得到你的帮助,或者至少是对你的解释。

谢谢!

1 个答案:

答案 0 :(得分:1)

-lc++(标准C ++ lib)附加到应用的Other Linker Flags中的Build Settings,看看是否能解决问题。在不了解您的应用和库的更多信息的情况下,我不确定发生了什么,但我推测在添加-ObjC时会导致libB的其他代码被加载,然后需要一些标准C ++库中的符号,但不可用。

或者,您可以在应用的libc++.tbd的{​​{1}}部分添加Link Binary With Libraries。当您单击该部分中的+号时,它出现在框架和库列表中。