带有静态库(swift, objc, c++)的混合macOs应用链接错误
Linking error for mixed macOs app with static libs (swift, objc, c++)
我有两个静态库和一个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 Phases
的Link Binary With Libraries
部分中添加libc++.tbd
。当你单击该部分的+号时,它可以在框架和库列表中使用。
相关文章:
- node-gyp 在 macOS 上未正确链接库
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- 混合组合和继承的C++问题
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 在混合代码库中将C转换为C++时出现许多包含错误
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- 从对象文件(.o)在macos上制作归档文件(.a文件)
- D3D11-将混合权重和索引传递到顶点着色器
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- macOS 上的 openvino 构建问题
- 为什么 __gcd() 在 macOS mojave 中抛出错误?
- 如何在 macOS 卡塔琳娜上解决此错误?
- C++分数混合比较运算符错误
- 在macOS Mojave上发布BOOST unit_test_framework/Google测试
- 在 macOS 上安装 clang_complete
- 是否可以混合使用SFINAE和模板专业化?
- 从macOS Catalina上的源代码编译LLVM(如何解决未找到"stdio.h")
- 在macOS Mojave上尝试OpenCV视频捕获时"Abort Trap: 6"
- 在 macOS 中使用 C/C++ 设置鼠标光标图像
- 带有静态库(swift, objc, c++)的混合macOs应用链接错误