You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

交叉编译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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:47:15