项目中遇到的问题,我的开发环境的gcc是4.1.2,而目标机器的gcc版本是3.2.2,而且libc的版本不同,我的是2.5,目标是2.3.2。
问题是,在我的机器上编译出来的动态库和可执行程序,到目标机器,会报错,”浮点数例外“,在网上搜索了一会,发现了问题的原因。
原因是glibc不兼容导致的,因为在高版本的的gcc中,在链接是会用新的hash技术来提高动态链接的速度,
代码是,
-Wl,--hash-style=gnu
但是老版本是不支持的,所以需要在编译时增加参数
-Wl,--hash-style=sysv另外要注意的是,这个参数需要ld的版本是2.17以上的。
查看ld的版本,可以使用命令,ld --version。