我正在尝试将我公司生产的基于Windows的库转换为在AIX上运行。我们目前能够在Solaris和Linux上运行它,但是AIX会导致一些其他问题。我不确定这是操作系统设置问题还是编码问题,但我首先尝试编码方法。 该库使用来自各种模块的C样式约定导出一些函数。我的测试应用程序可以愉快地调用某些模块中的一些函数。但是,有一个特定的模块,其中每个功能都是段错误的。我在函数的顶部放了一条cout日志消息,这不会被击中。 使用dbx查看coredump仅显示故障是非法操作码0x0。 我已经尝试编写一个测试应用程序,从库中导出一个函数并在一个应用程序中使用它,这很好。 我还尝试编写一个较小的测试应用程序,该应用程序仅链接包含违规功能的模块。在这种情况下,我可以触发cout记录功能。 我已关闭所有优化,并为应用程序和库提供相同的编译器标记/版本。
我觉得库太大了/导出太多功能而且某些东西正在变得腐败/溢出。我没有AIX的经验,所以任何有关这是否可能或其他方法来指导调试的指示都将非常感激。
答案 0 :(得分:0)
段错是一个红鲱鱼。问题是我在应用程序的链接器行上使用了-G。似乎告诉链接器您正在使用运行时链接,因此它忽略了未定义的函数。当我调用一个我没有动态链接的底层函数时,它是合理崩溃的。 一旦我从应用程序中取出-G标志,我就会找到导致我出现问题的函数的未定义符号列表。我仍然不完全清楚为什么但是进一步修剪链接器标志似乎已经解决了这个问题(特别是我已经删除了我在库上的-shared标志)。 我只需要静态链接一些第三方库,我将全部设置。