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

Linking error for mixed macOs app with static libs (swift, objc, c++)

本文关键字:混合 macOs 应用 错误 链接 objc 静态 swift c++      更新时间:2023-10-16

我有两个静态库和一个macOs App(都在最新的XCode 8.1下)。

1)第一个自由(),是 ObjC + + (混合ObjC和c++/stl)

2) Second (B)是纯的ObjC,包含一些常见的类别(例如NSObject)

3)应用程序是Swift的,并使用两个库

所有目标都使用相同的c++标志(libc++11等),问题是:

1)如果我添加-ObjC(和/或)-load_all链接标志到App(与lib B类别的正常链接),那么我得到了许多"架构x86_64未定义符号"(所有关于STL)

2)如果我删除这个链接器标志,那么App编译正常,但在运行时,我有"缺失选择器"为所有lib B类别。

然而,如果我完全删除lib B(直接在App中添加其所有源)并分别删除-ObjC/-load_all,那么STL链接的问题就解决了,但不幸的是这对我来说不是正确的选择。所以我希望你能帮忙,或者至少解释一下。

谢谢!

-lc++(标准c++库)附加到应用程序Build Settings中的Other Linker Flags,看看是否解决了问题。在不了解更多关于您的应用程序和库的情况下,我不确定发生了什么,但我会推测,当-ObjC被添加时,导致libB的额外代码被加载,然后来自标准c++库的一些符号不知何故需要,但不可用。

或者你可以在应用程序的Build PhasesLink Binary With Libraries部分中添加libc++.tbd。当你单击该部分的+号时,它可以在框架和库列表中使用。