交叉编译Qt for树莓派64位时出现crt1.o文件找不到的问题
解决树莓派64位交叉编译Qt 5.15.2时链接器路径问题
核心原因说明
LD_LIBRARY_PATH和ldconfig是给主机系统动态链接器用的,和交叉编译器的搜索逻辑无关。交叉编译时,编译器只会从自身配置、指定的sysroot路径或编译参数里的-L路径查找目标平台的库和启动文件(如crt1.o、crti.o)。
解决方法
1. 直接在configure时指定sysroot与链接参数
交叉编译Qt的核心是正确设置目标平台的根文件系统路径(sysroot),configure会自动基于此路径搜索库和启动文件。执行configure时添加以下关键参数:
./configure -prefix /opt/qt5.15.2-rpi64 \ -sysroot /path/to/your/raspberrypi/rootfs \ -device linux-rasp-pi4-aarch64-g++ \ -device-option CROSS_COMPILE=aarch64-linux-gnu- \ -opensource -confirm-license \ -no-opengl \ -skip qtwayland \ -skip qtwebengine \ -nomake tests \ -nomake examples
- 替换
/path/to/your/raspberrypi/rootfs为你实际的树莓派64位根文件系统路径 - 如果仍有路径问题,可追加手动指定库路径:
-QMAKE_LFLAGS="-L/path/to/rootfs/lib/aarch64-linux-gnu -L/path/to/rootfs/usr/lib/aarch64-linux-gnu"
2. 修改交叉编译的QMakeSpec配置
找到Qt源码中对应平台的mkspec文件(如qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf),添加以下配置:
QMAKE_SYSROOT = /path/to/your/raspberrypi/rootfs QMAKE_LIBDIR += $$QMAKE_SYSROOT/lib/aarch64-linux-gnu $$QMAKE_SYSROOT/usr/lib/aarch64-linux-gnu QMAKE_LFLAGS += --sysroot=$$QMAKE_SYSROOT
保存后重新运行configure,编译器会自动从指定的sysroot路径下查找所需文件。
3. 验证交叉编译器的搜索路径
先检查交叉编译器当前的搜索目录:
aarch64-linux-gnu-g++ -print-search-dirs
如果输出的libdirs里没有树莓派的库路径,可通过环境变量强制指定sysroot:
export CFLAGS="--sysroot=/path/to/raspberrypi/rootfs" export CXXFLAGS="--sysroot=/path/to/raspberrypi/rootfs" export LDFLAGS="--sysroot=/path/to/raspberrypi/rootfs"
设置完成后再执行Qt的configure命令。
内容的提问来源于stack exchange,提问作者TSG
相关产品推荐
相关产品推荐

