ubuntu12.04安装Qt5.6

Qt版本选择

ubuntu12.04默认安装的是qt4,如果我们想使用qt5的新功能(比如Qt quick),就得自己下载安装qt5了,使用apt-get install qtcreator你会发现安装的还是qt4,所以只能自己去下载qt5的版本,下载链接http://download.qt.io/official_releases/qt/,最初我选择了一个最新的qt5.7以上版本,安装后发现编译程序需要支持c++11的编译器,而ubuntu12.04自带的是gcc4.6.3,gcc4.8版本才开始支持c++11,而升级gcc版本是一项异常复杂的事情,需要首先更新glibc库,一不小心就好导致系统崩溃,所以退而求其次选择了Qt5.6.0版本,这个版本的QWebkit已经去除,使用QWebEngine代替了,对qml的支持也是很好的,是个比较经典的版本。

安装步骤

直接下载.run的安装包,使用chmod +x加上执行权限后,运行即可,是图像化的安装向导,安装过程很顺利,建议的是选择src也安装上,后期方便查阅源码,调试问题,特别是qt的一些错误输出我们可以到源码中去查找具体造成的地方和原因,此为也可以用来学习qt跨平台的代码时怎么写出来的,特别受益。

安装完成后,发现qtcreator是找不到的,为了方便日后好用,可以在/etc/environment文件中加上qtcreator所在的路径,这样就可以找的到qtcreator了,当时发现运行时报错QXcbConnection: Could not connect to display,缺少插件xcb,实际上到plugin/platforms下发现了libqxcb.so这个插件库,使用ldd发现缺少libEGL.so这个依赖项,所以到比较高的ubuntu版本下将这个库拷贝了过来,此外可能还缺少了库有libgbm.so,libxcb-xfixes0.so,libwayland-ltst-server0.so,libwayland-ltst-client0.so,libnss3.so等库,使用apt-get下载安装,或者从其它高ubuntu系统上拷贝过来即可,注意软链接对应好,可以使用ln -sf建立软链接,直到你使用ldd所有的库链接都找的到对应.so文件,libQt5的库也可能找不到,这是因为没有将qt安装目录下lib所在目录添加到ld搜素路径导致,可以使用set LD_EXPORT_PATH=/qt5.6.0/5.6/gcc_64/lib;$LD_EXPORT_PATH,但这只是临时生效,最好添加到ld.so.conf.d下新建一个libqt5.conf,写入/qt5.6.0/5.6/gcc_64/lib(注意换成你自己对应的qt库目录),ldconfig下即可。
总之为了在ubuntu12.04上跑起来还是花费了不少功夫的

详细操作

ldd libqxcb.so可以发现缺少libEGL.so这个依赖库
将这个库从其它地方下载或者拷贝,放到/usr/lib/x86_64-linux-gnu目录
并建立软链接ln -sf libEGL.so.1.0.0 libEGL.so.1

ldd libEGL.so可以发现缺少以下依赖库
libgbm.so
libxcb-xfixes0.so
libwayland-ltst-server0.so
libwayland-ltst-client0.so

libgbm.so库从其它地方下载或者拷贝,放到/usr/lib/x86_64-linux-gnu目录
并建立软链接ln -sf libgbm.so.1.0.0 libgbm.so.1

其它库可以用apt-get安装
apt-get install libxcb-xfixes0
apt-get install libwayland-ltst-server0
apt-get install libwayland-ltst-client0
apt-get install libnss3

编写qt.conf,放到运行目录
[Paths]
Prefix=/opt/Qt5.6.0/5.6/gcc_64

编写libqt5.conf,放到/etc/ld.so.conf.d目录,ldconfig生效
echo /opt/Qt5.6.0/5.6/gcc_64/lib > libqt5.conf
ldconfig

这样你应该终于能够运行QtCreator程序了,新建一个基于widgets的应用程序,测试也是ok的

打包发布

将写好的qt程序拷贝到其它机器上运行,也是遇到了一堆的问题,首先你不可能把目标机器安装上qtcreator,使用ssh远程的情况下也是无法运行图像化的安装向导的,况且我们只想要qt5依赖库,不需要qt的开发工具。所以按例使用ldd去获取到所需的依赖库,将用到的.so打包即可,同样遇到了xcb插件无法启动的问题,将libqxcb.so也打包过去,而且解决掉ldd缺少依赖库的问题,最后将这些库的目录都要添加到ld的搜索目录中去。

如果你的程序中没有使用qml或者webenginewidgets模块,应该可以部署运行起来了,如果使用了,还需要打包gcc_64下libexec(里面有个qtwebengineprocess是浏览器内核进程程序)、resources、translations、qml目录,那这些目录部署时放到哪呢,最后发现qt安装目录bin下都会有个qt.conf,通过qt帮助文档了解到,qt.conf正是用来指定这些目录的,按照安装时的放好,其实只需要设置Prefix前缀目录即可,其它的都会加上默认路径,将qt.conf放置到你写的qt应用程序运行目录即可。
下面是qt.conf的默认路径

Entry                       Default Value
Prefix                      QCoreApplication::applicationDirPath()
Documentation               doc
Headers                     include
Libraries                   lib
LibraryExecutables          libexec
Binaries                    bin
Plugins                     plugins
Imports                     imports
Qml2Imports                 qml
ArchData                    .
Data                        .
Translations                translations
Examples                    examples
Tests                       tests
Settings                    .

总之你需要会用ldd命令去查看依赖项,设置ld搜索路径,设置PATH路径,配置好qt.conf,还是相当麻烦的,如果不是目标机器是ubuntu12.04,还是建议直接使用高版本的ubuntu吧。

你可能感兴趣的:(Qt,linux)