移植32位QT程序到ubuntu18.04

时间:2021-06-17 16:26:51   收藏:0   阅读:0

1,操作系统变更

某个程序A,是在ubuntu12.04的虚拟机上编译QT4.8的源代码,并将最终的执行程序运行在ubuntu12.04系统上。

由于出货要更换主板,供应商提供的ubuntu操作系统版本确定为18.04。

测试结果表明,原ubuntu12.04的虚拟机上编译的执行程序无法直接运行在ubuntu18.04系统上。

2,无法直接运行的原因

ubuntu18.04为64位操作系统,默认采用64位代码库,而ubuntu12.04的虚拟机为32位系统,虚拟机上编译的执行程序为32位,执行程序启动后需要调用的依赖库均为32位文件,这些条件在ubuntu18.04上默认均不提供,因此无法直接运行在新的操作系统上。

3,解决思路

第一种思路是,将A程序源代码在ubuntu18.04机器上重新编译一遍,如此产生的执行文件即可在ubuntu18.04系统下执行。其优势在于,一次性彻底解决问题;其劣势在于,需要熟悉QT编译环境配置,特别是QT4的环境较为古老,各种依赖库在ubuntu18.04下不一定完全支持,代码功能也不一定能与32位保持一致,编译也不一定能成功。

第二种思路是,在ubuntu18.04机器上配置32位程序的运行环境。其优势在于,当前代码无需重新编译为64位程序,程序行为与以前会大概率保持一致;其劣势在于,需摸索搭建32位运行环境,需深度测试,需重新编写安装手册。

目前实现的方案采用的是第二种。

4,部署条件

本部署条件针对的是方案二,即要在ubuntu18.04机器上运行32位的A软件。以下条件供采购或者系统安装时参考:

 1)      ubuntu18.04必须是中文系统

2)      ubuntu18.04必须是同时支持64位和32位程序运行的系统。具体判断如下:

a)      在终端输入 dpkg --print-architecture,返回amd64

b)      在终端输入 dpkg --print-foreign-architectures,返回i386

 

技术图片

 

5,系统配置步骤

5.1,操作系统安装32位运行库

apt update
apt install libc6:i386 libstdc++6:i386
apt install lib32ncurses5 lib32z1

5.2,配置LD_LIBRARY_PATH

在当前用户的主文件夹中,先打开“显示隐藏文件”选项,然后点击右键,用文本编辑器打开 .bashrc文件。

在.bashrc文件中最后添加一行,

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/f/mypro/lib

 

 注意:冒号后面的路径为 查询机程序下的lib子目录路径,此处仅为示例,应根据实际路径进行替换。

5.3,添加32位依赖库

本步骤最为关键,也最为繁琐。需要将A程序运行时依赖的32位库文件全部从原操作系统中找出来,然后复制到上述LD_LIBRARY_PATH包含的路径中。

比如,在没有复制依赖库之前,运行程序后会显示找不到“×.so.×”之类的文件。

f@f-To-be-filled-by-O-E-M:~/mypro$ ./mypro
./mypro: error while loading shared libraries: libQtWebKit.so.4: cannot open shared object file: No such file or directory

此时,要到原系统中,采用locate或whereis命令,找到该so文件,复制到ubuntu18.04系统下的LD_LIBRARY_PATH包含的路径中。

该过程相当费时费力,因为每次运行程序只会提示一个错误就停下来。

因此建议使用 ldd 命令一次性将程序运行的依赖库文件一次性显示出来。注意下图中,凡右侧为空的,就是缺少的库文件。

技术图片

 

5.4,配置QT运行环境

32位的QT程序如果使用了数据库,无论是mysql还是sqlite3,均需要32位的驱动。因此要在运行程序目录中添加一个qt.conf文件,指定程序要找驱动的位置。

[Paths]
Plugins = ./plugins

 

然后将原系统中的驱动程序拷贝到运行文件目录下的plugins子目录下,如:

cp -R /usr/lib/i386-linux-gnu/qt4/plugins/ plugins

 

plugins子目录下的文件究竟需要哪些,可根据实际需求而定。笔者就是只保留了imageformats和sqldrivers两个目录。

 

6,总结

经过以上工作,原来的32位QT程序顺利地运行在ubuntu18.04系统下了。

一路安装摸索花了不少时间,但是只要善于运用网络搜索,解决起来并不复杂。在此一并感谢所有相关作者。

另外,方案一也是值得考虑的,当然这就是后话了。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!