gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:20:40 28 4
gpt4 key购买 nike

我有两个静态库和一个 ma​​cOs 应用程序(都在最新的 XCode 8.1 下)。

1) 第一个库 (A),是 ObjC++(混合 objc 和 c++/STL)

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

3) 该应用程序是 Swift 并且使用两个库

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

1) 如果我将 -ObjC (和/或)-load_all 链接器标志添加到 App (与 lib < strong>B 类别),然后我得到许多“体系结构 x86_64 的 undefined symbol ”(所有关于 STL)

2) 如果我删除这个链接器标志,那么 App 编译正常,但在运行时我得到了所有库 B< 的“missing selector”/strong> 类别。

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

谢谢!

最佳答案

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

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

关于c++ - 混合 macOs 应用程序与静态库(swift、objc、c++)的链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40562874/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com