我正在尝试使用C ++ 11支持编译3个项目的工作区。这组项目已使用LLVM编译器默认值成功编译和链接。此外,c ++代码之前已经编译过许多编译器,包括g ++,llvm,msvc,sun,irix等,因此代码非常干净。
在工作区构建设置的c ++语言方言部分下,有3个行项目:
语言方言 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 :: thread,它与objective-c接口(并且c ++代码仍然是可移植的)
答案 0 :(得分:3)
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 :(得分:1)
我终于将问题追溯到两件事
1)尽管我在工作区级别设置了编译器选项,但这些选项并未传播到组成项目。 需要注意的事情!所以实际上不同的项目正在使用不同的编译器库和方言编译 - 所以不会出现链接错误。对我有用的选项组合是:
C语言方言编译器默认
C ++语言方言 -std = c ++ 11
C ++标准库 libc ++(支持C ++ 11的LLVM C ++标准库)
2)在c ++ 11编译中,我的一个项目无法编译。修复语法错误后,使用上面的选项编译和链接
答案 2 :(得分:1)
使用Code 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 ++标准库。