动态链接器 - 如何查找缺失的符号

时间:2011-12-12 20:43:13

标签: c++ xcode macos dynamic-linking

我的程序在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中的库中没有的函数?

2 个答案:

答案 0 :(得分: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 :(得分:1)

正如dasblinkenlight所说,c++filt是用于解码“受损名称”的命令。

问题似乎是C ++库的实现细节可能已经改变为10.6,而使用标准库并且编译为10.6的coode与10.5不兼容。

我记得Apple发布10.3.9更新主要是为了提供与10.4.x编译的程序的兼容性;也许他们也为10.5 / 10.6做了同样的事情。您的10.5系统是否使用最新版本?

如果你想要确保你的程序在10.5上运行,即使你在10.6上构建它,请告诉XCode使用10.5 SDK来构建它。