我在特定的机器上执行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输出)。你知道是什么导致了我的问题吗?谢谢。
发布于 2011-02-22 08:14:23
我的猜测是,有问题的机器运行的是比其他机器更老的Linux发行版:据我所知,通常的原因是二进制文件中的符号哈希表和动态链接器之间的不匹配。
动态链接的二进制文件(或相应的库)可能在名为.hash的节中有一个经典的ELF符号哈希表,或者在名为.gnu.hash的节中有一个新的GNU符号哈希表,或者两者都有。
一些较新的发行版在默认情况下将gcc设置为向链接器(--hash-style=gnu)传递标志,这会导致它在二进制文件中只发出.gnu.hash部分。
如果这样的二进制文件在较旧的系统上运行,而该系统使用的是不理解.gnu.hash的旧动态链接器,那么它将以这种方式失败。失败发生在动态链接的早期阶段(在二进制文件实际执行任何操作之前),这就是为什么您实际上没有从strace获得任何输出的原因。
发布于 2011-02-22 07:53:37
只有这些信息很难给出答案。您应该尝试在gdb中运行您的程序或插入sigfpe信号处理程序,以确定错误的确切位置及其原因。
https://stackoverflow.com/questions/5072558
复制相似问题