2013-04-16 83 views
2
  1. 加速安裝,並通過:brew install boost
  2. 所附加的標題路徑/usr/local/Cellar/boost/1.53.0/include到用戶頭搜索路徑
  3. 添加庫路徑/usr/local/Cellar/boost/1.53.0/lib到庫搜索路徑

main.cppBoost庫在Xcode鏈接錯誤

#include <fstream> 
#include <sstream> 
#include <string> 
#include "test.cpp" 

void test(){ 
    Test instance(true, 'm', 50, 17.89, "fuzhijie"); 
    stringstream binary_sstream; 
    boost::archive::binary_oarchive binary_oa(binary_sstream); 
    binary_oa << instance; 
} 

int main(int argc, const char * argv[]) 
{ 
    test(); 
    return 0; 
} 

當我按下CTRL + b時,fol低顯示錯誤信息如下:

Undefined symbols for architecture x86_64: 
    "boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive, char, std::__1::char_traits<char> >::init()", referenced from: 
     boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive, char, std::__1::char_traits<char> >::init(unsigned int) in main.o 
    "boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive, char, std::__1::char_traits<char> >::save(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from: 
     void boost::archive::save_access::save_primitive<boost::archive::binary_oarchive, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(boost::archive::binary_oarchive&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) in main.o 
    "boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive, char, std::__1::char_traits<char> >::basic_binary_oprimitive(std::__1::basic_streambuf<char, std::__1::char_traits<char> >&, bool)", referenced from: 
     boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive, char, std::__1::char_traits<char> >::binary_oarchive_impl(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, unsigned int) in main.o 
    "boost::archive::basic_binary_oprimitive<boost::archive::binary_oarchive, char, std::__1::char_traits<char> >::~basic_binary_oprimitive()", referenced from: 
     boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive, char, std::__1::char_traits<char> >::~binary_oarchive_impl() in main.o 
     boost::archive::binary_oarchive_impl<boost::archive::binary_oarchive, char, std::__1::char_traits<char> >::binary_oarchive_impl(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, unsigned int) in main.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

有沒有人有任何建議如何解決這個問題?

+0

'Boost.Serialization'不是僅包含頭文件的庫,您應該鏈接二進制文件('-lserialization')。 –

+0

我已經將libboost-serializtion-mt.dylib添加到Librarys的鏈接二進制文件中,如果不鏈接,則顯示其他錯誤。 – simplexk

+0

'dylib'是一個動態庫,不能鏈接它 - 它在運行時被加載。你應該鏈接它的導入庫'boost-serialization-mt.a'。 –

回答

0

原因可能是你有編譯器gcc5或gcc6。 而你的代碼在你的boost庫中使用了不同的編譯標誌。 詳細信息請仔細閱讀本link

如果你可以重新編譯您使用的所有不兼容庫,用編譯器選項的做法,

-D_GLIBCXX_USE_CXX11_ABI=1 

,然後重新生成項目。如果仍不能鏈接,添加更改項目的生成文件編譯器選項設置爲0

-D_GLIBCXX_USE_CXX11_ABI=0 

======更新=======

真正的解決方案應該安裝新的Boost庫(v1.62)gcc6或gcc5。