标题:qt6.7源码无法交叉编译到arm平台,指定-xplatform linux-aarch64-gnu-g++无效
作者:lankii
日期:2024-09-20 10:46
内容:
中控版arm的,带的socketcan,基于lubuntu系统,系统的qt库是qt5.12.8的,所以qt5编译的新版库有冲突,造成系统奔溃,用5.12.8源码编译的没问题,但是这个sockecan 居然找不到插件,用qt6.7在线安装测试则正常,所以应该修复了,但是中控开发qt不方便,还是要x86_64下虚拟机交叉编译才好用
用 ./configure-xplatform linux-aarch64-gnu-g++ -prefix/xxx/armqt67 -opensource -confirm-license -release -shared -optimized-qmake-qt-libjpeg -qt-libpng -qt-zlib -nomake examples -nomake tests-no-opengl -c++std c++20 -make libs -widgets-dbus-runtime -qt-zlib -qt-freetype -qt-harfbuzz -strip-skip qtgraphs -skip qtwebengine -skip qt3d -skip qtquick3d-skip qtdoc -skip qtquick3dphysics -skip qtopcua
能完成源码编译,但是交叉编译生成的lib库全部是x86_64的,怀疑cmake没用指定的编译器,用命令指定,这个cmake build就一大堆莫名其妙的错误,头疼cmake -DCMAKE_C_COMPILER=/lxxx/arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc -DCMAKE_CXX_COMPILER=/XXX/arm-gnu-toolchain-13.3.rel1-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-g++ -B build -S .
大家有没有遇到过这类问题,交叉编译指令感觉没有正常执行
#1 [lankii 09-20 10:49]
生成的qt6.7库 为x86_64 libQt6WlShellIntegration.prl:ASCII text
libQt6WlShellIntegration.so: symbolic link to libQt6WlShellIntegration.so.6
libQt6WlShellIntegration.so.6: symbolic link to libQt6WlShellIntegration.so.6.7.2
libQt6WlShellIntegration.so.6.7.2: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID=8f72af03fdfebbdb848f41c939d3e19898d12c4f, not stripped
libQt6XcbQpa.prl:ASCII text, with very long lines
libQt6XcbQpa.so: symbolic link to libQt6XcbQpa.so.6
libQt6XcbQpa.so.6: symbolic link to libQt6XcbQpa.so.6.7.2
libQt6XcbQpa.so.6.7.2: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, BuildID=00a8abe911a532a331438e4570b3c8aad96e92fd, not stripped
正常make编译的qt5为 arm:
libQt5WebView.so.5.12.8:&n ..
#2 [lankii 09-23 09:40]
终于搞出来了,qt6.7编译真是麻烦,编译好后,qt5写的很多东西都不支持,于是重新下载qtseriabus的库编译,交叉编译用的qt5.12.8, 编译器最新aarch13,(建议不要用最新的,否则arm这边系统会报缺少GLIBCXX_3.4.29,这玩意和系统核心,一个更新不好,你的arm linux就会奔溃,我使用source.list添加高版本,在同个apt install libstdc++.so.6 自动更新完成,手动复制黏贴库,有可能系统奔溃,任何linux命令无法使用) 编译成功后复制到arm里面,发现还是不行,于是相qt67下为什么是正常,于是file ,ldd 等文件相关链接库,发现一个可疑文件夹qt5 ,于是尝试把编译的库放入 /lib/aarch64-linux-gnu/qt5/plugins ,终于出现x86_64下的 :
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
arm_release_ver of this libmali is 'g2p0-01eac0', rk_so_ver is '4'.
"passthrucan"
"peakcan"
"socketcan"
"tinycan"
"virtualcan"
Available CAN plugins: ("passthrucan", "peakcan", "socketcan", "tinycan", "virtualcan")