登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

西部软件部落

程序人生,路漫漫其修远兮

 
 
 

日志

 
 
关于我

擅长Linux C,Shell,GTK,Oracle技术,熟悉支付网关,POSP收单领域。喜欢开源。注:本站原创文章欢迎转载,转载时请注明出处。

(原创)关于gcc编译出现“浮点数例外”的错误  

2013-03-29 17:18:42|  分类: Linux C/C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

        最近一个应用系统再做移植,开发环境的操作系统是Linux AS5.0,此运用能此系统上能正常的运行,由于对方的服务器为Linux AS4,移植过程发现应用都RUN不起来,都在报“浮点数例外”的错误,网上搜索了一大堆,文章也是从A网站/博客直接被Copy到B网站/博客,这些COPY者,也不知道是否真正理解并解决了他们的问题,下面是网上找到的一些对此问题的一些分析:

加编译选项“-Wl,--hash-style=sysv” ’

说程序代码中含有除数为0的情况,等等。。

..................

 

当然这也不能够排除说有这些原因所导致的,比如我写了个测试代码

#include <stdlib.h>
#include <stdio.h>

int main()
{

        int a=120;
        int b=0;
        printf("a/b='%d'",a/b);
        return 0;
}

在Linux AS5上直接编译后运行,就会报出

浮点数例外 (core dumped)

好了,你应该能明白我的意思,也就是说,这样的代码不管你怎么移植,错误早就会出现了,也就是说这样的问题没等到了移植,你就能够定位出了具体的原因了。

好了,唠叨了以上几句,下面正式的来写具体我的处理办法,首先我考虑到的就是编译器版本的问题,也就是说你在高版本的编译器编译出来的应用拿到此时低版本的编译器所在的系统上,可以说将会有80%的概率出现所谓的“浮点数例外”的coredump。当然你要是就写了一个hello world的这样的程序,出现的概率当然就很低了。既然说到编译器版本的问题,那我们就开始升级编译器吧:

因为手头的AS5光盘中都是RPM的安装包,那就直接用RPM的方式进行升级:

  #rpm -Uvh  --nodeps  --replacefiles kernheaders-2.6.18-8.el5.i386.rpm
  #rpm -Uvh  --nodeps  --replacefiles glibc-common-2.5-12.i386.rpm
  #rpm -Uvh  --nodeps  --replacefiles glibc-headers-2.5-12.i386.rpm
  #rpm -Uvh  --nodeps  --replacefiles glibc-devel-2.5-12.i386.rpm
  #rpm -Uvh  --nodeps  --replacefiles glibc-2.5-12.i386.rpm
  #rpm -Uvh  --nodeps  --replacefiles cpp-4.1.1-52.el5.i386.rpm
  #rpm -Uvh  --nodeps  --replacefiles gcc-4.1.1-52.el5.i386.rpm

首先需要特别说明的是,Linux AS4上的gcc版本都是3.1,现在统一升级成4.1。注意:以上要按顺序进行安装。

好了gcc已经升级完了,下面又开始出现另外一个问题了,那就是ld,对,没错,是GNU-LD,Linux AS4上的版本

[root@localhost Server]# ld --version
GNU ld version 2.15.92.0.2 20040927
Copyright 2002 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License.  This program has absolutely no warranty.
[root@localhost Server]# l *binut*
-rw-r--r--  1 root root 2998003 Jan 17  2007 binutils-2.17.50.0.6-2.el5.i386.rpm
-rw-r--r--  1 root root  620672 Jan 17  2007 binutils-devel-2.17.50.0.6-2.el5.i3 86.rpm
[root@localhost Server]# rpm -Uvh --nodeps --replacefiles binutils-2.17.50.0.6-2.el5.i386.rpm
warning: binutils-2.17.50.0.6-2.el5.i386.rpm: V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:binutils               ########################################### [100%]
[root@localhost Server]# rpm -Uvh --nodeps --replacefiles binutils-devel-2.17.50.0.6-2.el5.i386.rpm
warning: binutils-devel-2.17.50.0.6-2.el5.i386.rpm: V3 DSA signature: NOKEY, key ID 37017186
Preparing...                ########################################### [100%]
   1:binutils-devel         ########################################### [100%]
[root@localhost Server]# ld --version
GNU ld version 2.17.50.0.6-2.el5 20061020
Copyright 2005 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License.  This program has absolutely no warranty.

GNU-LD升级成功。为了能够确保能够更好的看到调试信息,最好按照上述的方式,将GDB也进行升级下。

关于LD的升级,网上很少有说到。主要是不知道LD这个链接器是在那个RPM里,希望以后能够记住它(binutils)。

本次关于浮点数例外的coredump的问题全部解决。

  评论这张
 
阅读(6435)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018