快速总结:在gcc 4.1、aCC、VisualAge和MSVC下的许多平台上运行良好的现有代码。我正在努力使这个达到扼杀惠普-UX目前的水平。
输出由多个(8-10)共享库组成。
现在一切都编译得很好,但是当尝试运行任何测试应用程序时,它们都会立即在某个全局构造函数中分割错误。事实上,gdb甚至不能给我提供关于这个实际全局对象在哪里的信息。si_code是对象的SEGV_ACCERR无效权限,“this”指针始终为0。
初始化如何调用为null的对象的ctor?这是gcc的全球初始化概念和惠普的概念(使用惠普的ld)之间的冲突吗?
从诊断的角度来看,你会去哪里?可悲的是,我不能把这个问题归结为任何能再现问题的测试用例。
发布于 2009-09-28 22:54:17
首先,我将对可执行文件、对象文件和共享库运行objdump。查找可疑的内容,如虚拟地址为0(即NULL)的数据段。
对于共享库,加载程序的工作是执行运行时链接,也许HP-UX加载程序并没有重新定位它应该有的位置。
另外,请查看GNU ld信息页。在构造函数选项下列出了一些可能有用的信息。不同的对象格式操作不同。
发布于 2009-09-29 02:53:08
您所讨论的共享库的编译和链接命令行是什么?确保使用"g++ -fPIC -c ..."编译对象,并将它们与"g++ -fPIC -shared ..."链接,而不是直接与"ld -b ..."链接。g++可以链接到附加的运行时支持代码中,这在HP-UX上可能是必需的。
https://stackoverflow.com/questions/1489597
复制相似问题