簡體   English   中英

升級到Mac OS X 10.9 / Xcode 5.0.1后,C ++鏈接錯誤

[英]C++ linking error after upgrading to Mac OS X 10.9 / Xcode 5.0.1

升級到Mac OS X 10.9 / Xcode 5.0.1后,創建共享庫(.dylib)的命令行失敗,出現了幾個未定義的符號。

clang++ -dynamiclib -install_name test.dylib *.o -o test.dylib
Undefined symbols for architecture x86_64:
  "std::allocator<char>::allocator()", referenced from:
      _main in test.o
  "std::allocator<char>::~allocator()", referenced from:
      _main in test.o
  "std::ostream::operator<<(std::ostream& (*)(std::ostream&))", referenced from:
      _main in test.o
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
      _main in test.o
  "std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from:
      _main in test.o
  "std::ios_base::Init::Init()", referenced from:
      ___cxx_global_var_init in test.o
  "std::ios_base::Init::~Init()", referenced from:
      ___cxx_global_var_init in test.o
  "std::cout", referenced from:
      _main in test.o
  "std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
      _main in test.o
  "std::basic_ostream<char, std::char_traits<char> >& std::operator<<<char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
      _main in test.o
ld: symbol(s) not found for architecture x86_64

答案是: https//mathematica.stackexchange.com/questions/34692/mathlink-linking-error-after-os-x-10-9-mavericks-upgrade

OS X上有兩種標准C ++庫實現:libstdc ++和libc ++。 它們不是二進制兼容的,libMLi3需要libstdc ++。

在10.8及更早版本中,默認選擇libstdc ++,默認情況下選擇10.9 libc ++。 為確保與libMLi3的兼容性,我們需要手動選擇libstdc ++。

為此,請將-stdlib = libstdc ++添加到鏈接命令。

相關文章: 使用Libc ++未定義引用與Clang進行編譯


編輯 :經過一些調查后,似乎-mmacosx-version-min與默認libstd的選擇之間存在聯系。 如果min version <10.9,那么默認的libstd等於libstdc++ ,否則等於libc++ 長期解決方案顯然是使用-stdlib=libc++

這些建議對Mac El capitan不起作用。 如果您在升級到El Capitan后遇到類似問題,請運行

xcode-select --install

在嘗試編譯之前

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM