我有一个可疑的起源库,它被识别file
为32位可执行文件.但是,当我dlopen
在32位CentOS 4.4机器上尝试它时,dlopen会终止SIGFPE
.当然,如果二进制格式出现问题,那么dlopen
应该处理错误吗?
所以问题是:什么样的问题会导致dlopen发出SIGFPE?
一些可能的原因是:
除以零(用gdb统计这个)
架构不匹配(您是否在同一架构上自行编译DSO?还是预先构建?)
ABI兼容性问题(在一个不同的Linux发行版上加载为一个Linux发行版构建的DSO).
以下是关于GNU系统中ELF格式的哈希生成的有趣讨论,当混合和匹配非基于该发行版/系统的DSO时,ABI不匹配可能导致系统上的SIGFPE.
使用以下命令对可执行文件运行GDB
]$ gdb ./my_executable (gdb) run
当程序崩溃时,获取回溯
(gdb) bt
如果堆栈结束do_lookup_x ()
然后您可能会遇到相同的问题,并且应该确保您的DSO对于您尝试加载它的系统是正确的...但是您确实说它有可疑的起源因此问题可能是类似于ABI的问题描述的那个.
得到一个不可疑的库/可执行文件!;)
祝好运