boost :: system :: error_code :: message使用-stdlib = libc ++作为乱码

时间:2012-08-30 17:49:10

标签: c++ macos boost c++11 clang

我在OS X 10.7.4下使用Boost 1.51,我发现链接C ++ 11标准库导致boost的系统错误代码消息输出完全乱码。
有谁知道为什么会这样,以及如何阻止它发生?

示例:

#include <iostream>
#include <boost/system/error_code.hpp>

int main() {
    std::cout << "system_category(9): " << boost::system::system_category().message( 9 ) << std::endl;
    std::cout << "system_category(bad_file_desc): " << boost::system::system_category().message( boost::system::errc::bad_file_descriptor ) << std::endl;
    return 0;
}

$ c++ --version
Apple clang version 4.1 (tags/Apple/clang-421.11.65) (based on LLVM 3.1svn)
Target: x86_64-apple-darwin11.4.0
Thread model: posix

$ c++ -lboost_system -o boost_error_codes boost_error_codes.cpp -std=c++11 && ./boost_error_codes
system_category(9): Bad file descriptor
system_category(bad_file_desc): Bad file descriptor

$ c++ -lboost_system -o boost_error_codes boost_error_codes.cpp -std=c++11 -stdlib=libc++ && ./boost_error_codes
system_category(9):     ?HJ?a?Q???t??
system_category(bad_file_desc):     ??U?a?? W?a?0W?a?X  ?HJ?a?Q???t??

1 个答案:

答案 0 :(得分:1)

您是否也使用libc ++编译了boost.system?

LLVM的libc ++和GNU的libstdc ++不兼容ABI,所以如果你没有那可能是罪魁祸首。