[英]How to link in std C++ library on Mac OS X Mavericks?
我正在将应用程序移植到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:
[...]
但这是行不通的,我没有找到任何有关如何正确链接的示例。
您需要像这样将-lc++
添加到链接行:
铛-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
添加后,缺少的符号消失。
我在NetBeans 7.4中的MacBook Pro OS X Mavericks 9.2上使用CLang ++编译器,
-std=c++11 -stdlib=libc++ -Wall
我确定我是从安装针对Mavericks的最新Xcode命令行工具中获得的libc ++。 在我的系统上,动态libc ++库位于/usr/lib
目录中。
开始编辑
我刚刚尝试了从Xcode运行的基本“ Hello,World”,请确保将.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
所有工作均按预期进行。
结束编辑
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.