如何在Mac OS X Mavericks上的std C ++库中进行链接?

时间:2014-03-26 00:54:06

标签: c++ hyperlink clang osx-mavericks libstdc++

我正在将应用程序移植到OS X Darwin,并且错误符号会出现链接错误,如:

std::__1::basic_string<char, std::__1::char_traits<char>,
                       std::__1::allocator<char> >::find_last_of(char const*,
                                                                 unsigned long,
                                                                 unsigned long) const
operator delete[](void*)
typeinfo for std::runtime_error
std::set_unexpected(void (*)())
std::exception::~exception()
[...]

我希望这些应该来自libstdc ++,但我不知道如何使用clang链接它。

以下是我尝试过的链接线以及由此导致的失败:

clang -std=c++11 -stdlib=libc++ -m64 -o ARCH.darwin_1310_i86/release/myExec ARCH.darwin_1310_i86/release/myExec.o ../../src/netcomm/ARCH.darwin_1310_i86/release/libmyExec.a ../../src/common/ARCH.darwin_1310_i86/release/libcommon.a -L../zlib  -lz -L../Botan -lbotan-1.10 -lboost_thread-mt
Undefined symbols for architecture x86_64:
  "std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find_last_of(char const*, unsigned long, unsigned long) const", referenced from:
[...]

但这不起作用,我没有找到任何正确链接它的例子。

2 个答案:

答案 0 :(得分:3)

您需要将-lc++添加到链接行,如下所示:

  

clang -std = c ++ 11 -stdlib = libc ++ -lc ++ -m64 -o ARCH.darwin_1310_i86 / release / myExec ARCH.darwin_1310_i86 / release / myExec.o ../../src/netcomm/ARCH.darwin_1310_i86 /release/libmyExec.a ../../src/common/ARCH.darwin_1310_i86/release/libcommon.a -L ../ zlib -lz -L ../ Botan -lbotan-1.10 -lboost_thread-mt

添加之后,丢失的符号就会消失。

答案 1 :(得分:0)

在我的MacBook Pro OS X Mavericks 9.2上使用CLang ++编译器,在NetBeans 7.4中,我有

-std=c++11 -stdlib=libc++ -Wall

我确信我从为小牛队安装最新的Xcode命令行工具中获得了libc ++。在我的系统上,动态libc ++库位于/usr/lib目录中。


开始编辑
我刚试过一个基本的,#34; Hello,World,&#34;从Xcode运行,确保.xcodeproj中的LLVM 5.0(CLang ++)编译器设置配置为:

C++ Language Dialect        C++11 [-std=c++11]
C++ Standard Library        libc++ (LLVM C++ Standard library with C++11 support)

C Language Dialect          c11


一切按预期工作。
结束修改