交叉编译 Qt5.12.8

编译 Qt 5.12.8

  • 下载Qt 源码
  • aarch64-linux-gnu
    • 安装交叉编译器
    • 制作编译脚本
    • 可能遇到的错误
      • cannot find -lclip2tri cannot find -lpoly2tri
      • QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed
  • linux-arm-gnueabihf
  • 安装
  • 添加套件

$lscpu  #查看CPU信息,选择用什么交叉编译器
$gcc -v #查看当前 linux 系统自带的gcc版本

下载Qt 源码

http://download.qt.io/archive/qt/5.12/5.12.8/single/
在安装时也有源码,最好使用single文件里的源码

每次编译源码前都要重新解压 Qt 源码,防止有其他问题

aarch64-linux-gnu

安装交叉编译器

注:笔者的板子是aarch64, 所以用了 aarch64-linux-gnu 根据不同的板子使用不同的交叉编译器工具

##安装 g++-aarch64-linux-gnu 交叉编译器
$sudo apt install g++-aarch64-linux-gnu #安装
$aarch64-linux-gnu-g++ -v  #查看默认安装的gcc版本

制作编译脚本

新建文本改名为 autoConfig.sh,复制粘贴以下内容

./configure \
-prefix /home/hu/hu/aarch64-qt5.12.8-2/bin \
-release \
-opensource \
-skip qtwayland \
-skip qtlocation \ 
-skip qtscript \
-xplatform  linux-aarch64-gnu-g++ \
-make libs \
-optimized-qmake \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-pkg-config \
-no-separate-debug-info \
-pch \
-shared \
-qt-libjpeg \
-qt-zlib \
-qt-libpng

把 autoConfig.sh 拷贝到 Qt 源码文件夹内的根目录

$sudo ./autoConfig.sh

sh:1:python:not found
//解决:安装python

$sudo apt-get install swig python-dev python3-dev

可能遇到的错误

cannot find -lclip2tri cannot find -lpoly2tri

发现是location模块依赖的,上面的脚本已修改

./configure \
-prefix /home/hu/hu/aarch64-qt5.12.8-2/bin \
-release \
-opensource \
-skip qtwayland \
-skip qtlocation \
-skip qtscript \
-xplatform  linux-aarch64-gnu-g++ \
-make libs \
-optimized-qmake \
-no-opengl \
-no-sse2 \
-no-openssl \
-no-cups \
-no-glib \
-no-pkg-config \
-no-separate-debug-info \
-pch \
-shared \
-qt-libjpeg \
-qt-zlib \
-qt-libpng

QIconvCodec::convertToUnicode: using Latin-1 for conversion, iconv_open failed

QIconvCodec::convertFromUnicode: using Latin-1 for conversion, iconv_open failed

解决 :下载 http://ftp.gnu.org/gnu/libiconv/libiconv-1.14.tar.gz
e x p o r t C C = / u s r / b i n / a a r c h 64 − l i n u x − g n u − g c c . / c o n f i g u r e − p r e f i x = export CC=/usr/bin/aarch64-linux-gnu-gcc ./configure -prefix= exportCC=/usr/bin/aarch64linuxgnugcc./configureprefix=PWD/bin -host=arm-linux
make
make install

遇到问题:
In file included from progname.c:26:0:
./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
_GL_WARN_ON_USE (gets, “gets is a security hole - use fgets instead”);
^
make[2]: *** [progname.o] Error 1
make[2]: Leaving directory /usr/local/src/zabbix-2.4.7/libiconv-1.14/srclib' make[1]: *** [all] Error 2 make[1]: Leaving directory /usr/local/src/zabbix-2.4.7/libiconv-1.14/srclib’
make: *** [all] Error 2
解决方法:
vi libiconv-1.14/srclib/stdio.in.h
将1010行的代码:_GL_WARN_ON_USE (gets, “gets is a security hole - use fgets instead”);替换为:
#if defined(GLIBC) && !defined(UCLIBC) && !__GLIBC_PREREQ(2, 16)
_GL_WARN_ON_USE (gets, “gets is a security hole - use fgets instead”);
#endif
部署:
把bin 下的preloadable_libiconv.so 拷到的/usr/local/SeerRobotics/robod/ 下
修改 /etc/profile
在umask 022上一行添加
export LD_PRELOAD=/usr/local/SeerRobotics/robod/preloadable_libiconv.so

linux-arm-gnueabihf

在源码 src/qtbase/mkspecs 把 linux-arm-gnueabi-g++ 文件夹复制一份改名 linux-arm-gnueabihf-g++
1.修改 qmake.conf 中 gnueabi ->gnueabihf
2.安装交叉编译器

##安装 g++-arm-linux-gnueabihf 交叉编译器
$sudo apt install g++-arm-linux-gnueabihf #安装
$arm-linux-gnueabihf-g++ -v  #查看默认安装的gcc版本

export CC=/usr/bin/arm-linux-gnueabihf-gcc
export CXX=/usr/bin/arm-linux-gnueabihf-g++

安装python3

sudo apt-get install swig python-dev python3-dev

编译 Qt

 ./configure -release -opensource -confirm-license -xplatform linux-arm-gnueabihf-g++ -prefix /home/Qt5.12.8/5.12.8/armhf/bin -nomake examples -no-opengl -silent -qpa linuxfb
make
make install

安装

如果遇到
qt 没有被正确安装,请运行make install
把从官方安装的Qt5.12.8/mingw73_64/bin/qt.conf 复制黏贴到bin/qmake.exe 同等目录, 注意,编码一定要ANSI格式,不能用UTF-8。路径分隔符要"/“或”\"

注:如果下次打开再次提示 qt 没有正确安装,请运行 make install
则末尾追加 /etc/profile 文件, 把编译后的qt 安装顶层目录加到环境变量里

export PATH=$PATH:/Qt make install 后的路径

添加套件

配置 Kits : https://blog.csdn.net/u012020854/article/details/76213475

你可能感兴趣的:(Qt5,编译第三方库,交叉编译,Qt,编译,Qt,交叉编译,Qt5.12.8,j交叉编译,Qt5,编译,Qt,5)