ubuntu12.04 下编译qt-4.6.0总结

来源:互联网 发布:北京婚纱摄影口碑 知乎 编辑:程序博客网 时间:2024/05/17 23:56

    qt-4.6.0可为是比较老的版本了,在新版的ubuntu上编译可为是困难重重,但在嵌入式开发和软件移植中依然起着桥梁作用,以此文章总结一下编译时遇到的困难。

 

编译环境:

                             qt-everywhere-opensource-src-4.6.0.tar.gz (可以在qt ftp上下载)

                  g++-4.4;gcc-4.4

                  openssl-0.9.8q

                  libx11;libfreetype6;libavahi-gobject;libsm;libxrender;libfontconfig;libxext (可以通过apt-get install获得)

 

编译过程:

        ubuntu12.04版本中默认的g++版本是4.6,但4.6版本的g++,gcc无法编译。在编译时不会报错,但在连接qt库时会无法应用。所以要安装最适合编译qt各种版本的g++-4.4和gcc-4.4。安装完后查看g++目录(gcc方法相同)。

ls /usr/bin/g++* -l  //查看g++目录,发现默认g++ ->g++-4.6
sudo rm /usr/bin/g++ //删除软连接
sudo ln -s /usr/bin/g++ /usr/bin/g++ //从新建立连接
g++ -v

 

设置gcc-4.4的方法同上。

 

    Openssl的安装比较麻烦,可以用新立得,删除自带的Openssl-1.0.1,下载openssl-9.8.0q的源码http://ftp.openssl.org/source/openssl-0.9.8q.tar.gz 为什要用低版本的openssl,原因在于高版本的openssl修改了很多关于ssl的部分,会导致编译出错。

    编译源码

    

tar -zxf openssl-0.9.8q.tar.gzcd openssl-0.9.8q/./config  --prefix=/usr/local --openssldir=/usr/local/sslmake && make install./config shared --prefix=/usr/local --openssldir=/usr/local/sslmake cleanmake && make install


两次编译生成动态连接库。解决了无法找到opensslv.h

 

       这时候我们要对qt的源码进行修改主要是针对SSLV2错误的处理。由于SSLV2已经很少使用,在这里我们采用直接注释掉代码的方法。打开qt的源码目录../qt-everywhere-opensource-src-4.6.0/src\network\ssl。找到qsslsocket_openssl_symbols.cpp和qsslsocket_openssl_symbols_p.h打开,将其中的存在参数SSLv2_client_method和SSLv2_server_method所在的所有行,将其整行注释掉。这样就解决了编译时出现的

undefined reference to SSLv2_server_method

undefined reference to SSLv2_client_method

 

编译qt

./configure -xxxx  //xxxx为不需要的模块或连接动态连接库make sudo make install


这样编译就差不多完成了。但还没有加入环境变量在qt目录下

export QTDIR=/usr/local/Trolltech/Qt-4.6.0export PATH=$QTDIR/bin:$PATHexport QMAKESPEC=$QTDIR/mkspecs/default


这样算是大功告成了,编译qt make时间很长,大概1h-2h,要看./configure的模块而定