wujianhui:你的意思是安装一台RHEL5.9系统,在新系统上升级glibc。
然后编译Qt和应用程序,采用动态发布,这样就能够在没有环境的LINUX系统上运行?
那为什么我RHEL6.4不能发布的不能运行呢???
还是要在目标机器上升级glibc,才能运行???如果是在目标机器上升级,客户不同意的。
.......
(2014-07-17 22:19) 
在目标机器上升级glibc,客户不同意就只能使用第二种方法.
在RHEL5.9上自行编译Qt4.8.4,然后编译你自己的程序,打包程序与依赖库(qt4 library),然后发送给客户.
打包是个关键,这里与windows程序不同,最好不要复制依赖库到当前程序所在路径,因为linux下的程序运行不会在当前目录查找.so这些动态库路径,除非你使用启动脚本修改LD_LIBRARY_PATH环境变量.
比较好的方法是这样子:
比如说你把qt4安装在/opt/qt4目录,编译你自己程序的时候使用链接参数-rpath=/opt/qt4/lib.发布程序的时候把libQtCore.so这些依赖库文件复制到目标机器的/opt/qt4/lib目录就可以了.
对于glibc版本过低问题,其实有个一劳永逸的解决方法,就是比较麻烦:
你可以在任何linux机器上重新编译一个低版本的gblic,安装到某个路径,比如/opt/dev_build/glibc2.9
然后重新编译binutils,gcc 编译的时候指定rpath为/opt/dev_build/glibc2.9/lib
以后你就可以用自己编译的gcc编译任何程序了,只要加上-rpath=/opt/dev_build/glibc2.9/lib参数.
发布程序的时候如果目标机器存在glibc过低问题,要把libc.so.6复制到目标机器的/opt/dev_build/glibc2.9/lib目录即可.