在xcode 4.5.2中编译带有c++ 11支持的混合objective-C/ c++项目时出现链接错误
Link errors compiling a mixed objective-C/C++ project with C++11 support in xcode 4.5.2
我正在尝试用c++ 11支持编译3个项目的工作空间。这组项目已经使用LLVM编译器默认值成功编译和链接。此外,c++代码之前已经在许多编译器上编译过,包括g++, llvm, msvc, sun, irix等,所以它是非常干净的代码。
在工作空间构建设置的c++语言方言部分有3行条目:
c语言方言
c++语言方言
c++标准库
使用设置:
c语言方言:编译器默认值
c++语言方言:编译器默认值
c++标准库:libc++(支持c++11的LLVM c++标准库)
我可以成功编译,但得到许多链接错误。有些来自我们自己的函数,有些来自标准函数。下面是一个标准函数的链接错误示例:
(null): "std::string::find_last_of(char const*, unsigned long) const",引用自:(null): "std::string::size() const",引用自:
很明显,我链接到了错误的标准库,所以我研究了改变上面的各种选项。将方言更改为-std=c++11甚至破坏了我的编译。我找不到适合我的组合。
你能指出哪里出了问题吗?
编辑:我这样做的动机是我想在我的c++代码中使用std::线程与objective-c接口(并使c++代码仍然是可移植的)
XCode 4.5.2/OSX 10.8.2
我一直在得到这些
(null): "std::string::find_last_of(char const*, unsigned long) const",
referenced from: (null): "std::string::size() const", referenced from:
不同版本的openCV库。问题似乎在于对c++标准库的访问。在这种情况下,工作设置如下:
旧库版本:
C Language Dialect GNU99[-std=gnu99]
C++ Language Dialect GNU++11[-std=gnu++11]
C++ Standard Library libstdc++ (GNU C++ standard library)
最近的库版本:
C Language Dialect GNU99[-std=gnu99]
C++ Language Dialect GNU++11[-std=gnu++11]
C++ Standard Library libc++ (LLVM C++ standard library with C++11 support)
将标准库规范切换到任何一个版本都会产生这些错误。
我最终将问题归结为两件事
1)尽管我在工作空间级别设置了编译器选项,但这些选项并没有被传播到组成项目。要注意的事情!所以实际上不同的项目是用不同的编译器库和方言编译的——所以有链接错误并不奇怪。对我有用的选项组合是:
C语言方言编译器默认值
c++语言方言 -std=c++11
c++标准库 libc++(支持c++ 11的LLVM c++标准库)
2)在c++11编译下,我的一个项目无法编译。修复语法错误后,它使用上面的选项
当使用代码5时,我有一个类似的问题
Undefined symbols for architecture armv7:
"std::string::clear()", referenced from:
FormatLog(unsigned int, int, char const*, std::string&) in libMO.a(AppLog.o)
将"部署目标"从7.0更改为6.0帮助了我。
对于XCode 4.5,似乎必须使用LLVM C++ with C++11 support
编译器而不是GNU C++
编译器用于c++标准库。
- 如何将数组从Objective-C发送到C++函数
- 在 Objective-C++ -> EXC_BAD_ACCESS Error 中使用"new"关键字
- Mac Snow Leopard 上的 Qt 5.3.2:ld:在架构x86_64 [clang、Objective-C
- 创建跨平台 C++ 触摸管理器.在 c++ 中传递 Objective-c 对象涉及代码
- C++对象作为 Objective-C++ 属性
- 将.cpp文件中的数据传递给Objective c ViewController
- 为什么这个来自 Objective-C++ 的dynamic_cast在调试中成功但在发布时失败?
- Objective-C 如何使用向量对?
- 在 Objective-C 和 Swift 之间委托问题
- Objective-C C++ 包装器 类型错误的不完整定义
- EXC_BAD_ACCESS Xcode,来自我的 Objective-C++ 和 swift 桥接标头中的 C++ 包
- 在 Objective-C++ 中应用于__weak指针时,通过关键字推导类型"auto"规则是什么?
- 如何发送(和接收)从 Swift 到 Objective c++ 再到 c++,然后备份到 Swift 的超大型浮动数组
- 使用来自Objective C的OpenCV分解同源异构图
- 如何将这行代码从C++转换为Objective-C
- Firebase:混合使用C++和Objective-C SDK可以吗
- 如何使用Visual Studio C/C++编译器(cl.exe)来预处理我的objective-C代码
- 有没有办法将函数从 objective-c++ 传递到标准 c++
- 从Objective-C中的C 标头读取变量
- Objective-C 块中的泄漏C++ shared_ptr