Profil de 巍Wayne'sPhotosBlogListes Outils Aide

Blog


7 avril

Linux程序从32位移植到64位遇到的几个问题

32位与64位指cpu位数
 在32位cpu下的Linux下调试运行成功的程序,到64位机下运行出现段错误 segmentation fault
 用gdb调试发现是在某个类对象创建是string出现的错误 ,调用这个库/lib64/tls/libc.so.6  错误 
 
 在32位下,如果类里的成员变量定义了而未初始化,并没有出现错误,而在64位下则会出现错误,尤其是string型变量应该赋值为“”否则类对象创建是会出现内存无法对其的情况   也就是类成员变量最后都初始化,比如在构造函数里初始化,否则可能在32位机下可以运行而在64位下无法运行
 简单起见,为了移植方便,用到struct结构体时,为防止结构体内成员可能出现内存不对齐的情况(关于内存对齐自己查,这个是容易出现段错误的一个容易忽略的地方),应该在结构体定义前写上 #pragma pack(1)采用紧凑对其,这样用sizeof获得struct大小时才是真实大小。并且为了程序运行快,在结构体定义后写上 #pragma pack()恢复默认对其方式。
-----------------------------------------------------
  gcc 3.4.6 与gcc 4以上在编译上有很大的不同,如果程序编译不通过或者出现段错误,不要忘了查一下机器的gcc版本,3.4.6据说是最通用用来编普通应用程序的,4以上版本据说是用来编内核的
------------------------------------------------------
好的程序在哪都能运行,Windows,linux,32位,64位,集群,刀片  如果出现移植问题,根本原因还是程序写的不规范
---------------------------------------------------------
   貌似space里 的blog容易被搜到,我也是在baidu ,Google搜了很多别人遇到的情况,才解决了这个困扰我2个星期的问题
   哈哈我的段落搜索引擎终于有点眉目了~欢迎交流 linwei_linwei@hotmail.com
   为我们学校的金融搜索引擎打个广告:   www.haitianyuan.com  海天园~~~  哈工大万岁!