我的程序在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库中不存在的问题?
我的程序在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库中不存在的问题?
使用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)
正如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来构建它。