mavericks / xcode5.0.1如何改变编译器和链接器?

时间:2013-10-23 19:14:26

标签: c++ linker osx-mavericks

我将系统从10.8升级到10.9,相应地将xcode从5.0升级到5.0.1。

当我尝试运行我的构建的一部分,将多个.a文件组合到一个更大的共享库中时,我获得了回报:

Undefined symbols for architecture x86_64:
"__ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm", referenced from:             
__ZN2bt3fst12FstLookupSet14loadFromStringERKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEESA_ in libbtfst.a(bt_fst_factory.o)

过滤的问题符号为:

__ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13find_first_ofEPKcmm
std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::find_first_of(char const*, unsigned long, unsigned long) const

链接命令行如下所示:

libtool -macosx_version_min 10.6  -headerpad_max_install_names -dynamic -multiply_defined suppress -install_name `basename ../../../../rlp/lib/amd64-darwin12-xcode5/libbtutils.dylib` -o ../../../../rlp/lib/amd64-darwin12-xcode5/libbtutils.dylib -g   <long list of .a files>  -lstdc++.6 -lSystem

1 个答案:

答案 0 :(得分:1)

看起来你已经使用较新的libc ++编译了一些对象,这在10.6下是不受支持的,并且与链接期间使用的库相矛盾。

您可以使用-stdlib=libstdc++指定在编译期间使用的库,还需要确保在编译期间指定-mmacosx-version-min=10.6,这可能具有相同的效果,但显式声明了部署目标。 / p>