问题: 从RH5(gcc 4.1.2和GLIBC 2.5)到RH6(gcc 4.4.7和GLIBC 2.12)的迁移问题
详细说明: 我正在将一个大项目从RH5(gcc 4.1.2)迁移到RH6(gcc 4.4.7),所有内容都编译和链接没有任何打嗝。
在RH5上编译的代码在两台主机(RH5和RH6)上运行良好。
但是,在RH6上编译的代码也不适用。
没有运行时错误,只是我运行FAIL的许多回归测试之一。
这是一个复杂的因素:我的代码创建了一个模拟机器(微处理器)运行回归测试的软件/固件是在这个模拟机器上运行的软件,我没有调试这个固件。
当我在RH6主机上编译代码时,会注入错误 我能够将问题查明到两个目标文件(.o),它们链接在一起创建一个共享对象文件(.so),它是我模拟机器的一部分。
如果我在RH6机器上编译代码(使用gcc 4.4.7的机器,在我的回归测试期间可执行文件失败),然后添加在RH5(gcc 4.1.2)上编译的两个有问题的(.o)文件使用这两个.o文件重新编译(.so)文件(共享对象)然后一切正常,我的回归测试PASSes没有任何问题;顺便说一下它在RH5和RH6机器上传递。
我正在使用“nm”和“objdump”试图弄清楚什么是违规的函数/函数或库/库等等。
我的问题: 1-我如何利用这些工具(nm和/或objdump)来确定罪魁祸首? (如果我在从RH5和RH6生成的.so文件上运行上述命令并比较输出文件,我可以看到很大的差异,但由于每个编译器及其上下文的具体情况以及可能是什么,无法分辨出预期的差异。潜在的问题)
2-还有其他工具可以帮助我调查和解决这个问题吗?
3-如果我将RH6的.so文件和RH6的.so文件中的nm / objdump输出与来自RH5的两个.o文件进行比较,它们看起来很相似,我看不到纠结线的结束解开它,看看这些输出文件并尝试解决问题的方法是什么?
感谢您的任何意见,建议和贡献。