首页| 论坛| 消息

回复: linux程序发布提示GLIBC_2.9 not found
#6 [wujianhui 07-17 22:15]
那台系统有安装Qt3.3.8,我们把软件移植上去编译,应该是没问题。
但是我是想学习一下linux系统发布。
我记得原来移植Qt程序到开发板都没这问题呀
#7 回 adonais 的帖子 [wujianhui 07-17 22:19]
adonais:别乱回答,误导人家.
真正的问题是RHEL5.9系统上的glibc版本过低,静态发布也不可行.
解决问题的方法:
1)升级RHEL5.9上的glibc.
.......(2014-07-17 20:13)
你的意思是安装一台RHEL5.9系统,在新系统上升级glibc。
然后编译Qt和应用程序,采用动态发布,这样就能够在没有环境的LINUX系统上运行?
那为什么我RHEL6.4不能发布的不能运行呢???
还是要在目标机器上升级glibc,才能运行???如果是在目标机器上升级,客户不同意的。
#8 回 wujianhui 的帖子 [wujianhui 07-18 10:23]
wujianhui:寒夜行人:
1.自己安装一台rhel系统试试,看运行效果
2.把缺少的动态库放到程序运行的当前目录中
3.写脚本启动程序,先写当前路径添加到系统库路径中的命令,在写启动你的程序的命令
这样就不会有缺少库一说,也不用安装新的软件
.......(2014-07-17 22:12)
系统已经进入了。开机时按e,弹出选择kernel 那行,再按e编辑。输入linux single,回车完成编辑。
之后按b启动就可以进入单用户模式,就可以删除libc.so.6了,再重启成功进入系统。
#9 回 wujianhui 的帖子 [adonais 07-20 15:24]
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目录即可.
#10 回 adonais 的帖子 [wujianhui 07-21 11:08]
adonais:在目标机器上升级glibc,客户不同意就只能使用第二种方法.
在RHEL5.9上自行编译Qt4.8.4,然后编译你自己的程序,打包程序与依赖库(qt4 library),然后发送给客户.

打包是个关键,这里与windows程序不同,最好不要复制依赖库到当前程序所在路径,因为linux下的程序运行不会在当前目录 ..(2014-07-20 15:24)
我已经将我的程序改成Qt3版本了,但是还是要谢谢你。
有空可以试试你说的glibc编译的方式,以后用到的可能性很大哦

<< 1 2 >> (2/2)

回复 发表
主题 版块