GCC 4.1 / HP-UX 11.23上的静态/全局构造函数

时间:2009-09-28 22:00:13

标签: gcc hp-ux

快速摘要: 许多现有代码在gcc 4.1,aCC,VisualAge和MSVC下的许多平台上都能正常工作。我正在努力使这个目前适用于HP-UX。

输出包含多个(8-10)共享库。

现在一切都编译得很好,但是当试图运行任何测试应用程序时,它们会立即在某些全局构造函数中进行段错误。事实上,gdb甚至无法获取有关此实际全局对象的信息。 si_code是SEGV_ACCERR - 对象的无效权限,'this'指针始终为0

初始化是如何调用null对象的ctor的呢?这是gcc的全局初始化概念和HP的概念之间的冲突(使用HP的ld)吗?

在诊断时会从哪里开始?遗憾的是,我不能将此问题减少到任何再现问题的测试用例

2 个答案:

答案 0 :(得分:1)

我首先在可执行文件和目标文件以及共享库上运行objdump。查找可疑内容,例如虚拟地址为0的数据段(即NULL)。

使用共享库, loader 的工作是进行运行时链接,也许HP-UX加载器不会重定位它应该是什么。

另外,请查看GNU ld信息页面。 CONSTRUCTORS选项下列出了一些可能有用的信息。不同的对象格式的运作方式不同。

答案 1 :(得分:0)

有问题的共享库的编译和链接命令行是什么?请务必使用"g++ -fPIC -c ..."编译对象,并将其与"g++ -fPIC -shared ..." 直接与"ld -b ..."相关联。 g++可能会链接其他运行时支持代码,HP-UX可能需要这些代码。