QT5.4.2源码交叉编译

1. 环境
Ubuntu 16.04LTS 64bit
QT版本:qt-everywhere-opensource-src-5.4.2.tar.gz
交叉编译器:gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz(32位)
2. 配置交叉编译器
解压交叉编译器到/opt/linaro-arm-linux-gnueabihf/gcc-linaro-arm-linux-gnueabihf目录:
sudo tar -zxvf gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz -C /opt/linaro-arm-linux-gnueabihf/gcc-linaro-arm-linux-gnueabihf
设置环境变量:将交叉编译器目录设置到PATH环境变量中
打开配置文件:vi ~/.profile
在最后一行添加下面一段:
# cross complier
export PATH=/opt/linaro-arm-linux-gnueabihf/gcc-linaro-arm-linux-gnueabihf/bin:$PATH
对于64位系统来说,还需安装32位支持:gcc-6-base:i386、libc6:i386、libgcc1:i386、zlib1g:i386
sudo apt-get install gcc-6-base:i386 libc6:i386 libgcc1:i386 zlib1g:i386
可以通过如下命令检查交叉编译器是否安装成功:
arm-linux-gnueabihf-gcc -v
测试输出结果:

   
   
Using built-in specs. COLLECT_GCC=arm-linux-gnueabihf-gcc COLLECT_LTO_WRAPPER=/opt/linaro-arm-linux-gnueabihf/gcc-linaro-arm-linux-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/4.9.2/lto-wrapper Target: arm-linux-gnueabihf Configured with: /cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/src/gcc-linaro-4.9-2014.09/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install --with-sysroot=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fortran --disable-multilib --enable-multiarch --with-arch=armv7-a --with-tune=cortex-a9 --with-fpu=vfpv3-d16 --with-float=hard --with-pkgversion='crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09' --with-bugurl=https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --with-gmp=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpc=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-isl=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-libelf=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-plugin --enable-gold --with-local-prefix=/cbuild/slaves/oorts/crosstool-ng/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long --with-mode=thumb --disable-multilib --with-float=hard Thread model: posix gcc version 4.9.2 20140904 (prerelease) (crosstool-NG linaro-1.13.1-4.9-2014.09 - Linaro GCC 4.9-2014.09) 

3. 编译tslib
系统要求:需要安装autoconf automake libtool
sudo apt-get install autoconf automake libtool
tslib版本:tslib-1.12.tar.bz2 ( https://github.com/kergoth/tslib/tree/1.12
解压tslib:tar -jxf tslib-1.12.tar.bz2
进入tslib目录:cd tslib-1.12
设置编译器指令:
export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
生成配置文件:./autogen.sh --host=arm-linux-gnueabihf
配置:
./configure --prefix=/opt/linaro-arm-linux-gnueabihf/tslib-1.12 --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf --enable-inputapi=yes ac_cv_func_malloc_0_nonnull=yes
注:--prefix:制定安装目录/opt/linaro-arm-linux-gnueabihf/tslib-1.12
--enable-inputapi=yes:为了解决编译过程“ts_open:Inappropriate ioctol for device”错误
ac_cv_func_malloc_0_nonnull=yes:为了解决编译过程“undefined reference to `rpl_malloc' ”错误
编译与安装:
make
make install
成功后在/opt/linaro-arm-linux-gnueabihf/tslib-1.12目录如下:
bin  etc  include  lib  share
4. 编译OpenSSL
OpenSSL版本:openssl-1.0.2.tar.bz2( https://github.com/openssl/openssl/tree/OpenSSL_1_0_2-stable
注:目前稳定版本为1.1.0,不过由于1.1.0版本对1.0.*版本的兼容性不够,在编译QT的时候出错,固只能使用1.0.2版本。
解压OpenSSL:tar -jxf openssl-1.0.2.tar.bz2
进入OpenSSL目录:cd openssl-1.0.2
设置编译器指令:
export CC=arm-linux-gnueabihf-gcc
export AR=arm-linux-gnueabihf-ar
export RANLIB=arm-linux-gnueabihf-ranlib
配置:
TARGET=/opt/linaro-arm-linux-gnueabihf/openssl-1.0.2
./Configure --prefix=${TARGET} --openssldir=${TARGET} linux-armv4 -march=armv7-a shared
编译与安装:
make
make install
安装结果:/opt/linaro-arm-linux-gnueabihf/openssl-1.0.2目录下,如下:
bin  certs  include  lib  man  misc  openssl.cnf  private

5. 编译QT
QT版本:qt-everywhere-opensource-src-5.4.2.tar.gz
由于QT5.4.2支持的编译器如下:
没有 arm-linux-gnueabihf-g++,固需要手动建一份。将arm-linux-gnueabi-g++复制一份出来,编辑其中的qmake.conf配置文件,将文件中的arm-linux-gnueabi全部更改为arm-linux-gnueabihf。为了后续在编译QT应用程序时显示依赖tslib与openssl,在配置文件最后最后添加如下几行:
QMAKE_INCDIR += \
/opt/linaro-arm-linux-gnueabihf/tslib-1.12/include \
/opt/linaro-arm-linux-gnueabihf/openssl-1.0.2/include
QMAKE_LIBDIR += \
/opt/linaro-arm-linux-gnueabihf/tslib-1.12/lib \
/opt/linaro-arm-linux-gnueabihf/openssl-1.0.2/lib
QMAKE_LIBS += -lts -lssl -lcrypto
配置QT编译选项:
./configure \
-prefix /opt/linaro-arm-linux-gnueabihf/qt-5.4.2 \
-I /opt/linaro-arm-linux-gnueabihf/openssl-1.0.2/include \
-L /opt/linaro-arm-linux-gnueabihf/openssl-1.0.2/lib \
-xplatform linux-arm-gnueabihf-g++ \
-opensource \
-release \
-silent \
-shared \
-c++11 \
-openssl \
-no-iconv \
-linuxfb \
-nomake tests \
-nomake examples \
-nomake tools \
-v
编译与安装
make -j 2
make install
这个过程相对要长一些,这依赖于CPU的编译速度(几十分钟到几个小时)。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值