【问题标题】:Linking error for mixed macOs app with static libs (swift, objc, c++)混合 macOS 应用程序与静态库(swift、objc、c++)的链接错误
【发布时间】:2016-11-12 12:32:36
【问题描述】:

我有两个静态库和一个 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 B 个类别),然后我得到了许多“Undefined symbols for architecture x86_64”(全是关于 STL)

2) 如果我删除此链接器标志,则 App 编译正常,但在运行时我得到所有 lib B缺少选择器” /strong> 类别。

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 2011-10-08
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多