今天在ubuntu下编译安装了QT 4.8.4,中间遇到很多问题,这里写一下以供参考。
首先从 http://qt-project.org/ 网站上下载 qt-everywhere-opensource-src-4.8.4.tar.gz ,解压缩。进入解压缩后的目录,执行
./configure
可能遇到的问题:
1.找不到g++编译器
这个肯定是缺少g++编译器及其附属库,安装:sudo apt-get install g++
2.缺少X11开发库:
按照网上的说法,安装:sudo apt-get install libx11-dev libxext-dev libxtst-dev libxt-dev
这样,再次 ./configure 后就不会出错了
然后
make
make install (需要管理员权限)
完成。
编译完成后遇到的问题:
编译完成后测试了一段程序,发现如果使用自己编译出来的运行时库,界面字体不正常,效果如下图所示:
注:我的ubuntu在/usr/lib中包含了自带的QT库,但是是QT4.7版本的,如果使用自带的运行时库,则字体显示正常。考虑到版本较低和以后QT程序的发布,这里不准备使用自带的QT4.7库,所以有必要解决这个问题。
经过网上的一番搜索,发现是缺少fontconfig造成的,于是重新configure:
./configure -fontconfig
问题又来了,configure未通过,提示Fontconfig未通过,于是进入/config.tests/x11/fontconfig目录,执行make,发现缺少freetype相关的头文件,首先保证freetype开发库已经安装:
sudo apt-get install libfreetype6-dev
安装后发现freetype头文件没在标准路径,于是
ln -s /usr/include/freetype2/freetype/ /usr/include/freetype
再次在这里make,还是出错,发现缺少fontconfig开发库,于是
sudo apt-get install libfontconfig1-dev
再次make,不再出错。
然后进入Qt源代码目录,再次执行
./configure -fontconfig
通过。
make
make install
完成。
内嵌GTK主题:
./configure -fontconfig -gtkstyle
看一下生成的GTK theme support 是否为yes,不是的话可能缺少libgtk2.0-dev库,安装:
sudo apt-get install libgtk2.0-dev (注:包的名子可能在不同的平台上不太一样)
转:
安装过程中会提示需要用户手动安装扩展依赖的库 libglib2.0-dev,libSM-dev,libxrender-dev,libfontconfig1-dev,libxext-dev,如 果需要用到 OpenGL 则还需要安装 libgl-dev 和 libglu-dev,而这两个库是在 libglu1-mesa-dev 包中。因此,一个安装完整依赖包的命令是:
sudo apt-get install libglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-dev libglu1-mesa-dev
另:如何更改运行时库?方法如下:
在编译完一段程序后(如Helloword),打开程序编译目录(如helloworld-build-desktop-Debug,不是源代码目录),找到Makefile,修改其中的LFLAGS一行为:
LFLAGS = -Wl,-rpath=.:./lib:/usr/lib:/lib:/usr/local/Trolltech/Qt-4.8.4/lib
这样告诉程序在运行时,查找依赖库的顺序为 程序当前所在目录、当前目录下的lib目录、/usr/lib目录、/lib目录、/usr/local/Trolltech/Qt-4.8.4/lib目录(QT安装后的库目录)。这样修改后重新编译生成新的执行程序,库查找顺序就按照设定的顺序进行了,可以用命令ldd 可执行程序名查看找到的运行时库路径。所以如果把自己编译生成的库放到当前目录下,则程序运行时使用的就是自己的库。把这个测试程序运行时所需的QT库(libQtCore.so.4.8.4和libQtGui.so.4.8.4)拷贝到当前目录下并改名为libQtCore.so.4和libQtGui.so.4,即去掉后面的子版本扩展名,双击运行,程序就链接自己编译的库来运行了。
当然这种做法是临时的,在QtCreator中右键点击工程名--执行qmake,Makefile会又回到原来的样子,要永久修改,需要修改QT安装目录下的/mkspecs/common/gcc-base-unix.conf,把QMAKE_LFLAGS_RPATH这一行修改为:
QMAKE_LFLAGS_RPATH = -Wl,-rpath=.:./lib:/usr/lib:/lib:
即可。