1

我正在尝试编译具有 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++代码仍然是可移植的)

4

3 回答 3

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)

将标准库规范切换到任一版本都会产生这些错误。

于 2013-01-10T03:54:08.083 回答
1

我终于将问题追溯到两件事

1) 尽管我在工作区级别设置了编译器选项,但这些选项并未传播到组成项目。需要注意的事情!所以实际上不同的项目是用不同的编译器库和方言集编译的——所以出现链接错误也就不足为奇了。对我有用的选项组合是:

C 语言方言编译器默认
C++ 语言方言 -std=c++11
C++ 标准库libc++(支持 C++11 的 LLVM C++ 标准库)

2) 在 c++11 编译下,我的一个项目无法编译。修复语法错误后,它使用上述选项编译并链接良好

于 2013-01-10T23:17:45.057 回答
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++ 标准库的编译器。

于 2013-12-03T06:39:55.037 回答