C++ mavericks/xcode5.0.1如何更改编译器和链接器?

C++ mavericks/xcode5.0.1如何更改编译器和链接器?,c++,linker,osx-mavericks,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: __Z

我将一个系统从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
\uuuuuznkst3\uuuu112basic\u11strinicns\u11char\u9traitsciens\u9allocatorie13find\u1ofepkcmm
std::_1::基本字符串::查找(字符常量*,无符号长,无符号长)常量的第一个
链接命令行如下所示:

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
libtool-macosx\u version\u min 10.6-headerpad\u max\u install\u names-dynamic-multiply\u defined suppress-install\u name`basename../../../../rlp/lib/amd64-darwin12-xcode5/libbtutils.dylib`-o../../../rlp/lib/amd64-darwin12-xcode5/libbtutils.dylib-g-lstdc++.6-lSystem

看起来您已经使用更新的libc++编译了一些对象,10.6不支持它,并且与链接期间使用的库相矛盾


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

看起来您使用了更新的libc++编译了一些对象,这在10.6中不受支持,并且与链接期间使用的库相矛盾

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