问题:从 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 上编译的代码在任何一个上都不起作用。
没有运行时错误,只是我运行失败的众多回归测试之一。
这是复杂的因素:我的代码创建了一个模拟机器(微处理器)运行回归测试的软件/固件是在这个模拟机器上运行的软件,我没有调试这个固件。
当我在 RH6 主机中编译我的代码时,该错误被注入我能够将问题定位到两个对象文件 (.o),它们链接到创建一个共享对象文件 (.so),它是我的模拟机器的一部分.
如果我在 RH6 机器(使用 gcc 4.4.7 的机器,在我的回归测试期间可执行文件失败)上编译代码,然后添加在 RH5(gcc 4.1.2)上编译的两个有问题的(.o)文件并重新编译( .so) 文件(共享对象)使用这两个 .o 文件然后一切正常,我的回归测试通过没有任何问题;顺便说一句,它在 RH5 和 RH6 机器上都通过。
我正在使用“nm”和“objdump”试图找出有问题的函数/函数或库/库或其他什么。
我的问题: 1- 我如何利用这些工具(nm 和/或 objdump)来真正确定罪魁祸首?(如果我在从 RH5 和 RH6 生成的 .so 文件上运行上述命令并比较输出文件,我可以看到很大的差异,但由于每个编译器的具体情况及其上下文以及什么可能是潜在问题)
2-有没有其他工具可以真正帮助我调查和解决这个问题?
3- 如果我将 RH6 的 .so 文件和 RH6 的 .so 文件的 nm/objdump 输出与 RH5 的两个 .o 文件进行比较,它们看起来很相似,我看不到缠结线的末端以试图解开它,查看这些输出文件并尝试解决问题的方法是什么?
我感谢任何意见、建议和贡献。