2012-08-30 9 views
3

我在OS X 10.7.4下使用Boost 1.51,並且發現與C++ 11標準庫鏈接boost的系統錯誤代碼消息輸出完整的亂碼。
有誰知道這是爲什麼,以及如何阻止它發生?boost :: system :: error_code ::消息與-stdlib = libC++一起作爲亂碼出現

例子:

#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?? 
+0

我的第一個猜測是壞的。你使用'std :: cout << boost :: system :: system_category()。message(9)'或'std :: cout << boost :: system :: system_category()。 :: system :: errc :: bad_file_descriptor)' –

+0

@DaveS是啊,都:[image](http://i.imgur.com/sdJaQ.png) –

+1

你也使用'libC++'編譯boost.system, ? LLVM的'libC++'和GNU的'libstdC++'不是ABI兼容的... – fgp

回答

1

你有沒有使用的libC++編譯過boost.system?

LLVM的libC++和GNU的libstdC++不是ABI兼容的,所以如果你沒有這個可能是罪魁禍首。

相關問題