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

GCC 4.1/HP-UX 11.23上的静态/全局构造函数,gcc,hp-ux,Gcc,Hp Ux,快速总结: 在GCC4.1、aCC、VisualAge和MSVC下的许多平台上运行良好的大量现有代码。我目前正在HP-UX上努力使其达到标准 输出由多个(8-10个)共享库组成 现在一切都可以编译了,但当尝试运行任何测试应用程序时,它们会立即在某个全局构造函数中出错。事实上,gdb甚至不能告诉我这个实际的全局对象在哪里。si_代码为SEGV_ACCERR-对象的权限无效,“this”指针始终为0 初始化是如何调用空对象的ctor的?这是gcc的全局初始化概念和HP的全局初始化概念(使用HP的ld

快速总结: 在GCC4.1、aCC、VisualAge和MSVC下的许多平台上运行良好的大量现有代码。我目前正在HP-UX上努力使其达到标准

输出由多个(8-10个)共享库组成

现在一切都可以编译了,但当尝试运行任何测试应用程序时,它们会立即在某个全局构造函数中出错。事实上,gdb甚至不能告诉我这个实际的全局对象在哪里。si_代码为SEGV_ACCERR-对象的权限无效,“this”指针始终为0

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


在诊断这方面,你会从这里走到哪里?遗憾的是,我无法将此问题简化为任何类型的测试用例,以再现此问题。我将首先在可执行文件、对象文件和共享库上运行
objdump
。查找可疑的东西,如虚拟地址为0(即NULL)的数据段

对于共享库,加载程序的工作是执行运行时链接,也许HP-UX加载程序没有重新定位它应该做的事情


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

有关共享库的编译和链接命令行是什么?确保使用
“g++-fPIC-c…”
编译对象,并将它们链接到
“g++-fPIC-shared…”
,而不是直接链接到
“ld-b…”
g++
可能会链接其他运行时支持代码,这可能是
HP-UX

更新时需要的代码:一时兴起,我向失败的ctor添加了一个printf(以前是空的)。下一次我尝试一个示例应用程序时,它在另一个全局构造函数处崩溃。。。于是我重复了一遍,同样的事情也发生了。是否可能有什么东西正在优化空构造函数?这似乎不合逻辑,但这是HP UXYes,我在这两种情况下都使用g++,在链接端使用-fPIC-mlp64和额外的-shared-Wl,-z(加上一些其他特定于项目的标志)