2

快速总结:许多现有代码在 gcc 4.1、aCC、VisualAge 和 MSVC 下的众多平台上运行良好。我目前正在努力解决 HP-UX 上的问题。

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

现在一切都编译得很好,但是当尝试运行任何测试应用程序时,它们会立即在一些全局构造函数中出现段错误。事实上,gdb 甚至无法让我知道这个实际的全局对象在哪里。si_code 是 SEGV_ACCERR - 对象的无效权限和“this”指针始终为 0

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

就诊断而言,你会从哪里开始?可悲的是,我无法将此问题简化为重现该问题的任何类型的测试用例

4

2 回答 2

1

I would start by running objdump on the executable files and object files and shared libraries. Look for suspicious things like data segments whose virtual address is 0 (i.e. NULL).

With shared libraries, it is the job of the loader to do run-time linking, maybe the HP-UX loader isn't relocating something it should be.

Also, look at the GNU ld info pages. There's some potentially useful information listed under the CONSTRUCTORS option. Different object formats operate differently.

于 2009-09-28T22:54:17.330 回答
0

有问题的共享库的编译和链接命令行是什么?请务必使用 编译对象"g++ -fPIC -c ...",并将它们与 链接"g++ -fPIC -shared ...",而不是直接与"ld -b ..."g++可能会链接到额外的运行时支持代码,这可能是HP-UX.

于 2009-09-29T02:53:08.550 回答