c++ - mavericks/xcode5.0.1 是如何改变编译器和链接器的?

标签 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

最佳答案

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

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

关于c++ - mavericks/xcode5.0.1 是如何改变编译器和链接器的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19550436/

相关文章:

xcode - Clang 编码警告

c++ - 计算法 vector 的可见性

c - FFMPEg 和 gcc 问题

c++ - 使用 GCC 编译非必要的目标文件

cocoa - OSX 10.9 Mavericks 钥匙串(keychain) API 损坏?

python - 在 Mac os Mavericks 上安装 wxPython

c++ - 无法写入二进制文件

c++ - 在 C++ 中使用 for 循环是正确的方法吗?

c++ - 为什么存在奇特的指针?

c - 链接器提示 C 代码中的函数有多个定义,而实际上只有一个函数