【发布时间】:2014-10-21 17:01:46
【问题描述】:
我想用 stdlibc++ 为 Mac OS X 10.9 编译 boost。我运行以下命令:
./b2 threading=multi link=static runtime-link=static cxxflags="-stdlib=libstdc++" linkflags="-stdlib=libstdc++"
构建成功完成;但是,我的应用程序构建在链接时失败,当它找不到符号时,就像 std::__1::locale::use_facet、std::__1::basic_string 等一样糟糕。相关的细节是 __1,我相信。
我的问题是,如何使用 stdlibc++ 为 OSX 64b 平台编译 boost?
更多信息:
我在编译过程中注意到以下日志:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib:文件:bin.v2/libs/filesystem/build/clang-darwin-4.2.1/release/link- static/runtime-link-static/threading-multi/libboost_filesystem.a(windows_file_codecvt.o) 没有符号
【问题讨论】:
-
您正在使用
-stdlib=libstdc++编译您的应用程序?因为这也是需要的 -
@Petesh 是的,我正在使用 libstdc++ 编译应用程序
-
选择一个你构建的boost库,肯定依赖于STL中的某些东西,在它上面运行一个nm,通过
c++filt管道它并检查它是否提到std::__1::.如果它提到了这一点,那么 boost 已经 是用libstdc++构建的,在这种情况下你没有正确编译/链接你的应用程序。 -
@Petesh 如果我在 libboost_filesystem.a 上执行这些步骤,我会看到预期的命名空间。但是我确实在我的编译日志中注意到以下消息 >/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: file: bin.v2/libs/filesystem/build/clang-darwin -4.2.1/release/link-static/runtime-link-static/threading-multi/libboost_filesystem.a(windows_file_codecvt.o) 没有符号
-
我有一个巨大的大脑放屁。你的 boost 是用 libc++ 编译的,而不是 libstdc++。我正在失去理智(对于此处的误导表示歉意)。
标签: c++ macos boost clang libstdc++