交叉编译Qt5.6.1:飞腾cpu(1500a v1.0 64位)+银河麒麟服务器
目标机环境:飞腾cpu(1500a v1.0 64位),银河麒麟服务器操作系统
宿主机环境:Unbuntu16_64bit
目标机上环境
1. 安装交叉编译器
最好找硬件厂商询问交叉编译器,由于客户不方便提供,只好找网络上架构相近的编译器使用.
#安装
sudo apt-get install g++-aarch64-linux-gnu
安装后查看交叉编译版本信息,确保Target与目标机的Target一致
#版本号
aarch64-linux-gnu-g++ -v
总结(可跳过):
第一次按Qt-4.8.7交叉编译平台的搭建、移植详解的命令:sudo apt-get install g++-arm-linux-gnueabihf
,无法在目标机运行,原因是编译器的target和目标机g++不一样
根据命令:sudo apt-get install g++-arm-linux-gnueabihf
与target ( arm-linux-gnueabihf
)的关系,推测与目标机的环境匹配的交叉编译器安装命令应该为:sudo apt-get install g++-aarch64-linux-gnu
,可行(仅为推测,其他环境可能不适配)
2. 测试交叉编译器
由于qt工程庞大,编译耗时,最好在编译qt前确认交叉编译器可用
2.1 创建文件 hello.c
#include
int main()
{
printf("hello word\n");
return 0;
}
2.2 编译:
aarch64-linux-gnu-gcc -m64 -o helloAarch64 hello.c
输出文件:helloAarch64,测试能否在目标机上运行
3. qt编译环境配置
sudo apt-get install libx11-dev libxext-dev libxtst-dev zlib1g-dev lib32ncurses5 lib32z1
4. configure
4.1 创建mkspecs环境
cd /qtbase/mkspecs/
mkdir linux-aarch64-gnu-g++
cp linux-arm-gnueabi-g++/* linux-aarch64-gnu-g++/
gedit linux-aarch64-gnu-g++/qmake.conf
./configure -prefix /usr/local/qt561_64 -opensource -xplatform linux-aarch64-gnu-g++ -confirm-license --release -qt-zlib -no-gif -qt-freetype -no-openssl -no-glib -arch aarch64 -sysroot / -v -nomake examples -no-opengl -qt-zlib -no-gif -qt-libpng -qt-libjpeg -no-sm -no-xshape -no-xvideo -no-xsync -no-xinerama -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-mitshm -no-fontconfig -no-xinput
(若遇到./configure报错,修改指令前,先清除,否则新指令可能未生效)
#清除指令
gmake confclean
5 make
#该步骤时间长
make
#安装,qt将会安装在 -prefix 指定的目录
make install
6 安装QtCreator并配置环境
6.1 下载QtCreator安装包
qt-creator-opensource-linux-x86_64-3.5.1.run
6.2 配置
qt版本:
编译器:选择交叉编译器的g++
7 遇到的错误记录,仅供参考
7.1 错误1:no command
#报错前指令
./configure -prefix /usr/local/qt561_64 -opensource -xplatform linux-aarch64-gnu-g++ -confirm-license --release -qt-zlib -no-gif -no-freetype -no-openssl -no-glib -no-webkit -no-qt3support -arch aarch64 -sysroot / -v -nomake examples -nomake demos -no-opengl -qt-zlib -no-gif -no-libtiff -qt-libpng -qt-libmng -qt-libjpeg -no-sm -no-xshape -no-xvideo -no-xsync -no-xinerama -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-mitshm -no-fontconfig -no-xinput -fast
#报错1:
-no-webkit: invalid command-line switch
-no-qt3support: invalid command-line switch
Unknown part demos passed to -nomake.
-no-libtiff: invalid command-line switch
-qt-libmng: invalid command-line switch
-fast: invalid command-line switch
修改1:
./configure -prefix /usr/local/qt561_64 -opensource -xplatform linux-aarch64-gnu-g++ -confirm-license --release -qt-zlib -no-gif -no-freetype -no-openssl -no-glib -arch aarch64 -sysroot / -v -nomake examples -no-opengl -qt-zlib -no-gif -qt-libpng -qt-libjpeg -no-sm -no-xshape -no-xvideo -no-xsync -no-xinerama -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-mitshm -no-fontconfig -no-xinput
7.2 错误2: ft2build.h
#报错2(make阶段)
fatal error: ft2build.h: No such file or directory
#修改2.1(无效)
apt-get install libfreetype-dev
make
#修改2.2
#先清除
gmake confclean
#配置
./configure -prefix /usr/local/qt561_64 -opensource -xplatform linux-aarch64-gnu-g++ -confirm-license --release -qt-zlib -no-gif -qt-freetype -no-openssl -no-glib -arch aarch64 -sysroot / -v -nomake examples -no-opengl -qt-zlib -no-gif -qt-libpng -qt-libjpeg -no-sm -no-xshape -no-xvideo -no-xsync -no-xinerama -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-mitshm -no-fontconfig -no-xinput
#编译
make
7.3 报错3 undefined VP8DspInitNEON
#报错3
/dec.o:dec.c:function VP8DspInit: error: undefined reference to 'VP8DspInitNEON'
/enc.o:enc.c:function VP8EncDspInit: error: undefined reference to 'VP8EncDspInitNEON'
./lossless.o:lossless.c:function VP8LDspInit: error: undefined reference to 'VP8LDspInitNEON'
/upsampling.o:upsampling.c:function WebPInitUpsamplers: error: undefined reference to 'WebPInitUpsamplersNEON'
修改3
qtimageformats/src/3rdparty/libwebp/src/dsp/dsp.h文件:
//#define WEBP_USE_NEON //注释第68行后就可以编译通过