ubuntu x86_64编译qt arm库

1 篇文章 0 订阅
1 篇文章 0 订阅

ubuntu x86_64编译qt arm/aarch64库

参考https://blog.csdn.net/qq_30155503/article/details/80118705

pc机:ubuntu18.04 x86_64

树莓派:ubuntu18.04 aarch64

一、下载qt源码

1、因为pc机已经安装过qt,在qt安装路径下查看安装qt时是否保留了源码,如果保留了则可直接使用该源码,否则需要下载qt源码

$ cd QT5/5.11.1

在这里插入图片描述

可以看到我安装qt时编译了android x86、android arm、linux gcc_64 三个版本,并且保留了源码Src

2、为防止过程中破环或丢失源码,拷贝源码备份用于编译arm库

$ cp -r Src Src-arm
$ cp -r Src Src-aarch64

二、安装 arm-linux-gcc、 gcc-aarch64-linux交叉编译器

1、apt-get 自动安装

$ sudo apt-get install gcc-arm-linux-gnueabihf
$ sudo apt-get install g++-arm-linux-gnueabihf
$ sudo apt install gcc-aarch64-linux-gnu
$ sudo apt install g++-aarch64-linux-gnu

2、查看是否安装成功

$ arm-linux-gnueabihf-gcc -v
$ arm-linux-gnueabihf-g++ -v
$ aarch64-linux-gnu-gcc  --version
$ aarch64-linux-gnu-g++ --version

在这里插入图片描述在这里插入图片描述

3、测试

编写一个简单的测试文件test.c,内容如下

#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}

编译test.c

$ arm-linux-gnueabihf-gcc -o test-arm test.c
$ aarch64-linux-gnu-gcc -o test-aarch64 test.c

在书梅派上运行test-aarch64成功,运行test-arm报错:

-sh: ./test-arm: No such file or directory

解决:

查看arm系统,发现为aarch64,所以arm-linux-gnueabihf-gcc编译的程序在该系统上出错,如果使用aarch64-linux-gnu-gcc编译test,可直接在aarch64系统上使用了

$ uname -a

如果想要 test-arm也运行成功,我们的程序使用的是动态链接方式编译的,而ARM上的链接库文件路径不同,导致找不到文件,可以用gcc -static命令改用静态链接的方式编译,这样arm-linux-gnueabihf编译的程序也能在aarch64系统上运行了

$ arm-linux-gnueabihf-gcc -o test-arm test.c -static

三、安装编译arm、aarch64版本需要的触摸屏校准库

参考https://blog.csdn.net/qq_30155503/article/details/80117395

针对arm版本:

1、下载触摸屏校准库tslib

$ git clone https://github.com/libts/tslib.git

2、生成config文件

$ ./autogen.sh

在这里插入图片描述

3、配置编译条件,安装路径设置为/usr/work/lib/arm/tslib

$ ./configure CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++  --host=arm-linux-gnueabi --prefix=/usr/work/lib/arm/tslib ac_cv_func_malloc_0_nonnull=yes

4、编译安装

$ make
$ make install

此时在安装路径下查看是否成功,有如下五个文件夹,安装成功

在这里插入图片描述

5、针对aarch版本,与上面arm版本过程一样,只须将步骤3配置编译条件时改为

$ ./configure CC=/usr/bin/aarch64-linux-gnu-gcc  CXX=/usr/bin/aarch64-linux-gnu-g++   --host=aarch64-linux-gnu --prefix=/usr/work/lib/aarch64/tslib ac_cv_func_malloc_0_nonnull=yes

四、编译arm\aarch64版本xcb

1、下载xbc、xcb-proto、xau

xbc、xcb-proto下载网址:https://xcb.freedesktop.org/dist/

xau下载网址:https://www.x.org/releases/individual/lib/

2、解压

$ tar -zxvf ~/Downloads/libxcb-1.14.tar.gz
$ tar -zxvf ~/Downloads/xcb-proto-1.14.tar.gz
$ tar -zxvf ~/Downloads/libXau-1.0.9.tar.gz

3、编译安装xcb-proto

$ CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ ./configure --prefix=/usr/work/lib/aarch64/xcb-proto --host=aarch64-linux-gnu
$ CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ ./configure --prefix=/usr/work/lib/arm/xcb-proto --host=arm-linux-gnueabi
$ make
$ make install
$ export PKG_CONFIG_PATH=/usr/work/lib/aarch64/xcb-proto/lib/pkgconfig //设置环境变量PKG_CONFIG_PATH,否则xcb编译时会报错“No package 'xcb-proto' found”
$ export PKG_CONFIG_PATH=/usr/work/lib/arm/xcb-proto/lib/pkgconfig

4、编译安装xau

$ CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ ./configure --prefix=/usr/work/lib/aarch64/libxau --host=aarch64-linux-gnu --enable-option-
checking
$ CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ ./configure --prefix=/usr/work/lib/arm/libxau --host=arm-linux-gnueabi --enable-option-
checking
$ make
$ make install

5、编译安装xcb

$ CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ CFLAGS=-I/usr/work/lib/aarch64/libxau/include LDFLAGS=-L/usr/work/lib/aarch64/libxau/lib ./configure --prefix=/usr/work/lib/aarch64/xcb --host=aarch64-linux-gnu
$ CC=arm-linux-gnueabi-gcc CXX=arm-linux-gnueabi-g++ CFLAGS=-I/usr/work/lib/arm/libxau/include LDFLAGS=-L/usr/work/lib/arm/libxau/lib ./configure --prefix=/usr/work/lib/arm/xcb --host=arm-linux-gnueabi
$ make
$ make install

在这里插入图片描述

提示未设置环境变量 PKG_CONFIG_PATH,解决办法如上步骤3设置PKG_CONFIG_PATH

在这里插入图片描述

提示找不到xau,解决办法是在安装xbc前安装xau

五、编译arm qt库

1、查看并修改编译架构信息

在源码目录下,进入qtbase/mkspecs 目录可以看到各种支持的架构,我们要选择的是 linux-arm架构,进入linux-arm-gnueabi-g++目录查看qmake.conf文件中的编译配置参数

$ cd QT5/5.11.1/Src-arm
$ cd qtbase/mkspecs/
$ gedit linux-arm-gnueabi-g++/qmake.conf

在这里插入图片描述

qmake.conf中指定编译器与我们安装的编译器相符,所以不需修改

2、配置编译参数

返回源码目录

$ cd QT5/5.11.1/Src-arm

编写一个脚本build.sh配置编译参数,内容如下

在这里插入图片描述

运行build.sh脚本

$ chmod +x build.sh
$ ./build.sh

报错:

ERROR: Feature 'tslib' was enabled, but the pre-condition 'libs.tslib' failed.
ERROR: The OpenGL functionality tests failed!
You might need to modify the include and library search paths by editing QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] and QMAKE_LIBS_OPENGL[_ES2] in the mkspec for your platform.

解决:

找不到tslib库,所以配置文件末尾加上-recheck-all选项;找不到opengl库,因为没有安装,所以qt先不支持opengl

修改后build.sh如下,再次运行脚本不报错

修改:

#!/bin/sh
 
./configure \
	-prefix /usr/work/lib/QT5/5.11.1/linux-arm \
	-opensource \
	-confirm-license \
	-release \
	-xplatform  linux-arm-gnueabi-g++ \
	-pch \
	-sql-sqlite \
	-qt-libjpeg \
	-qt-libpng \
    -tslib \
	-qt-zlib \
    -no-opengl \
	-I /usr/work/lib/aarch64/tslib/include \
    -L /usr/work/lib/aarch64/tslib/lib \
    -recheck-all
        
# -prefix qt-arm安装路径
# -opensource 编译并链接Qt的开源版本
# -confirm-license 自动确认许可证
# -release 发行版
# -xplatform 交叉编译的目标平台
# -pch 预编译头文件
# -sql -sqlite 数据库 
# -qt-libjpeg 使用与Qt捆绑在一起的libjpeg
# -qt-libpng 使用与Qt捆绑在一起的libpng
# -tslib 编译对tslib的支持
# -qt-zlib 使用与Qt捆绑在一起的zlib
# -I 添加一个显式包含路径
# -L 添加一个明确的库路径

3、编译安装

$ make //需要比较长的时间
$ sudo make install

查看安装路径,安装成功
在这里插入图片描述

六、编译aarch64 qt版

1、查看并修改编译架构信息

在源码目录下,进入qtbase/mkspecs 目录可以看到各种支持的架构,我们要选择的是 linux-aarch64架构,进入linux-aarch64-gnu-g++目录查看qmake.conf文件中的编译配置参数

$ cd QT5/5.11.1/Src-aarch64
$ cd qtbase/mkspecs/
$ gedit linux-aarch64-gnu-g++/qmake.conf

在这里插入图片描述

qmake.conf中指定编译器与我们安装的编译器相符,所以不需修改

2、配置编译参数

返回源码目录

$ cd QT5/5.11.1/Src-aarch64

编写一个脚本build.sh配置编译参数,内容如下:

#!/bin/sh
 
./configure \
	-prefix /usr/work/lib/QT5/5.11.1/linux-aarch64 \
	-opensource \
	-confirm-license \
	-release \
	-xplatform  linux-aarch64-gnu-g++ \
	-pch \
	-sql-sqlite \
	-qt-libjpeg \
	-qt-libpng \
        -tslib \
	-qt-zlib \
        -no-opengl \
        -qt-xcb \
	-I /usr/work/lib/aarch64/tslib/include \
        -I /usr/work/lib/aarch64/xcb/include \
        -L /usr/work/lib/aarch64/tslib/lib \
        -L /usr/work/lib/aarch64/xcb/lib \
        -recheck-all
        
# -prefix qt-arm安装路径
# -opensource 编译并链接Qt的开源版本
# -confirm-license 自动确认许可证
# -release 发行版
# -xplatform 交叉编译的目标平台
# -pch 预编译头文件
# -sql -sqlite 数据库 
# -qt-libjpeg 使用与Qt捆绑在一起的libjpeg
# -qt-libpng 使用与Qt捆绑在一起的libpng
# -tslib 编译对tslib的支持,触摸屏校准库
# -qt-zlib 使用与Qt捆绑在一起的zlib
# -I 添加一个显式包含路径
# -L 添加一个明确的库路径
# -qt-xcb xcb显示格式
# -recheck-all

运行build.sh脚本

$ chmod +x build.sh
$ ./build.sh

3、编译安装

$ make //需要比较长的时间
$ sudo make install
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
以下是在 Ubuntu 18.04 操作系统下,使用 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 交叉编译 Qt 5.6.2 的流程: 1. 下载 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 工具链,并解压到某个目录下。 2. 安装 Qt 5.6.2 的依赖: ``` sudo apt-get update sudo apt-get install build-essential perl python git sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxslt1-dev libgl1-mesa-dev libglu1-mesa-dev libsqlite3-dev libmysqlclient-dev libpq-dev libiodbc2-dev libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libxrandr-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev libgstreamer-plugins-ugly1.0-dev gstreamer1.0-libav gstreamer1.0-alsa gstreamer1.0-pulseaudio libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev libgstreamer-plugins-ugly1.0-dev ``` 3. 下载 Qt 5.6.2 的源代码,并解压到某个目录下。 4. 进入 Qt 5.6.2 的源代码目录,执行以下命令: ``` ./configure -release -opengl es2 -device linux-rasp-pi2-g++ -device-option CROSS_COMPILE=/path/to/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /path/to/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5arm -no-xcb -no-pch -no-icu -no-gif -no-libjpeg -no-libpng -no-harfbuzz -no-openssl -no-qml-debug -nomake examples -nomake tests ``` 其中,/path/to/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 是 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 工具链的路径,/path/to/sysroot 是交叉编译环境的根文件系统路径。 5. 执行 make 命令进行编译: ``` make -j4 ``` 其中,-j4 表示使用 4 个线程进行编译。 6. 执行 make install 命令进行安装: ``` sudo make install ``` 7. 完成后,在 /usr/local/qt5arm 目录下会生成 Qt 5.6.2 的安装文件。把该目录添加到交叉编译环境的 PATH 环境变量中即可使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_34214088

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值