首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strace:任何事情发生前的SIGFPE

strace:任何事情发生前的SIGFPE
EN

Stack Overflow用户
提问于 2011-02-22 07:43:33
回答 2查看 467关注 0票数 1

我在特定的机器上执行C++程序时遇到了问题。下面是整个strace的输出:

代码语言:javascript
复制
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输出)。你知道是什么导致了我的问题吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2011-02-22 08:14:23

我的猜测是,有问题的机器运行的是比其他机器更老的Linux发行版:据我所知,通常的原因是二进制文件中的符号哈希表和动态链接器之间的不匹配。

动态链接的二进制文件(或相应的库)可能在名为.hash的节中有一个经典的ELF符号哈希表,或者在名为.gnu.hash的节中有一个新的GNU符号哈希表,或者两者都有。

一些较新的发行版在默认情况下将gcc设置为向链接器(--hash-style=gnu)传递标志,这会导致它在二进制文件中只发出.gnu.hash部分。

如果这样的二进制文件在较旧的系统上运行,而该系统使用的是不理解.gnu.hash的旧动态链接器,那么它将以这种方式失败。失败发生在动态链接的早期阶段(在二进制文件实际执行任何操作之前),这就是为什么您实际上没有从strace获得任何输出的原因。

票数 3
EN

Stack Overflow用户

发布于 2011-02-22 07:53:37

只有这些信息很难给出答案。您应该尝试在gdb中运行您的程序或插入sigfpe信号处理程序,以确定错误的确切位置及其原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5072558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档