2011-12-12 20 views
3

我的程序運行在OS X 10.6罰款,但與錯誤上不去10.5:動態連接器 - 如何找到丟失的符號

dyld: lazy symbol binding failed: Symbol not found: 
__ZSt16__ostream_insertIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_PKS3_l 

當然我沒有在我的軟件,神祕東西。

我該如何去弄清楚我打電話的那個函數在10.5的庫上不存在?

回答

3

使用c++filt命令找出缺少的函數的名稱。

在你的情況,這是std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long)

1

如已通過dasblinkenlight說,c++filt是要使用的命令解碼「錯位的名稱」。

問題似乎是C++庫的實現細節可能已經改變了10.6,使用標準庫並編譯爲10.6的代碼與10.5不兼容。

我記得蘋果發佈了10.3.9更新主要是爲了提供與10.4.x編譯的程序的兼容性;也許他們爲10.5/10.6做了同樣的事情。您的10.5系統是否使用最新版本?

如果您想確保您的程序在10.5上運行,即使您在10.6上構建它,請告訴XCode使用10.5 SDK來構建它。