繁体   English   中英

在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甚至破坏了我的编译。 我找不到适合我的组合。

您能建议出什么问题吗?

编辑:我这样做的动机是,我想在与Objective-C交互的C ++代码中使用std :: thread(并使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编译器的LLVM C++ with C++11 support而不是用于C ++标准库的GNU C++编译器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM