我在特定计算机上执行C++程序时遇到问题。这是整个strace输出:
26936 execve("/data1/xfm/bin/xfm", ["/data1/xfm/bin/xfm", "-d", "-s", "/data1/smail/", "-p", "/data1/xfm", "-m", "Mailing.176"], [/* 21 vars */]) = 0
26936 uname({sys="Linux", node="smail2.<removed>.com", ...}) = 0
26936 brk(0) = 0x98f7000
26936 --- SIGFPE (Floating point exception) @ 0 (0) ---
26936 +++ killed by SIGFPE +++
我已经在其他几台计算机上安装并运行了该可执行文件,并且没有问题(并且有数千行strace输出)。任何想法可能导致我的问题吗?谢谢。
最佳答案
我的猜测是有问题的机器运行的是其他版本的Linux发行版:据我所知,这通常是由于二进制文件中的符号哈希表与动态链接器不匹配所致。
动态链接的二进制文件(或相应的库)可能在.hash
部分中具有经典的ELF符号哈希表,或者在.gnu.hash
部分中具有新的GNU符号哈希表,或者两者都有。
最近的一些发行版中设置了gcc
,默认情况下将标志传递给链接器(--hash-style=gnu
),这会使它仅在二进制文件中发出.gnu.hash
节。
如果这样的二进制文件在具有旧的动态链接器的旧系统上运行,而该旧的动态链接器不了解.gnu.hash
,则它将完全以这种方式失败。故障发生在动态链接的早期(在二进制文件本身不执行任何操作之前),这就是为什么strace
实际上没有输出的原因。
关于c++ - strace:发生任何事情之前SIGFPE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5072558/