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

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库中不存在的问题?

2个回答

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来构建它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接