我有两个静态库和一个 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++.tbdLink Binary With Libraries部分中添加Build Phases。单击该部分中的+号后,将在出现的框架和库列表中提供该功能。

10-08 07:29
查看更多