2013-10-23 29 views
1

我将系统从10.8升级到10.9,并相应地将xcode从5.0升级到5.0.1。小牛/ xcode5.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

看起来你已经整理了一些对象使用10.6不支持的更新的libC++,并且与链接期间使用的库相矛盾。

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