Qt5交叉编译记录
前言
使用野火交叉编译Qt库(Qt5)进行linux平台的交叉编译qt5.15.2,发现一些问题。具体是指编译时,执行到4.1.2.2 创建sysroot目录
发生了一些问题,导致编译检查时发现缺少以下库文件
- xcb
- eglfs
- fontxconfig
- tslib
- system-sqlite
在不同的平台上多次尝试创建sysroot目录,尝试debian10,debian11均无果。最后在该教程中提到的sysroot_debian10.tar.gz
部署以后,终于可以正常完成编译。
然后就产生了好奇,为什么我自己从机器上实际同步到编译主机的库文件就找不到呢?
一、排查思路
1. 排查野火给的库文件和从机器上同步的库文件目录的区别
按照泰山派的资料导入板载系统镜像
【立创·泰山派RK3566开发板】板载系统镜像提取
# 创建目录
mkdir -p ~/WorkSpace/rootfs
# 从嵌入式机器上导入库文件
sudo rsync -avx root@192.168.50.113:/ ~/WorkSpace/rootfs
# 对比lib目录
diff -rq --brief ~/WorkSpace/sysroot/lib ~/WorkSpace/rootfs/lib | grep "Only in /home/yoooola/WorkSpace/sysroot" > missing_lib_files.txt
# 对比usr目录
diff -rq --brief ~/WorkSpace/sysroot/usr ~/WorkSpace/rootfs/usr | grep "Only in /home/yoooola/WorkSpace/sysroot" > missing_usr_files.txt
1.1 分析对比结果
xcb,eglfs,fontconfig,tslib,system-sqlite 关键文件查找结果
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find sysroot -path '*plugins/platforms/*eglfs*' 2>/dev/null
sysroot/usr/lib/aarch64-linux-gnu/qt5/plugins/platforms/libqeglfs.so
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find rootfs/ -path '*plugins/platforms/*eglfs*' 2>/dev/null
rootfs/usr/lib/aarch64-linux-gnu/qt5/plugins/platforms/libqeglfs.so
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find sysroot -name 'libfontconfig*.so*' 2>/dev/null
sysroot/usr/lib/aarch64-linux-gnu/libfontconfig.so
sysroot/usr/lib/aarch64-linux-gnu/libfontconfig.so.1
sysroot/usr/lib/aarch64-linux-gnu/libfontconfig.so.1.12.0
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find rootfs/ -name 'libfontconfig*.so*' 2>/dev/null
rootfs/usr/lib/aarch64-linux-gnu/libfontconfig.so.1
rootfs/usr/lib/aarch64-linux-gnu/libfontconfig.so.1.12.0
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find sysroot -name '*libts*.so*' 2>/dev/null
sysroot/usr/lib/gcc/aarch64-linux-gnu/8/libtsan.so
sysroot/usr/lib/aarch64-linux-gnu/libts.so.0
sysroot/usr/lib/aarch64-linux-gnu/libtsan.so.0.0.0
sysroot/usr/lib/aarch64-linux-gnu/libtsan.so.0
sysroot/usr/lib/aarch64-linux-gnu/libts.so
sysroot/usr/lib/aarch64-linux-gnu/libts.so.0.10.1
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find rootfs/ -name '*libts*.so*' 2>/dev/null
rootfs/usr/lib/gcc/aarch64-linux-gnu/8/libtsan.so
rootfs/usr/lib/aarch64-linux-gnu/libtsan.so.0.0.0
rootfs/usr/lib/aarch64-linux-gnu/libtsan.so.0
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find sysroot -name 'libsqlite3.so*' 2>/dev/null
sysroot/usr/lib/aarch64-linux-gnu/libsqlite3.so.0
sysroot/usr/lib/aarch64-linux-gnu/libsqlite3.so
sysroot/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ find rootfs/ -name 'libsqlite3.so*' 2>/dev/null
rootfs/usr/lib/aarch64-linux-gnu/libsqlite3.so.0
rootfs/usr/lib/aarch64-linux-gnu/libsqlite3.so.0.8.6
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$
1.2 如果直接使用从机器上同步的库文件进行编译
报错内容如下
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ ./build-qt.sh
start configure platform...
#
# qmake configuration for the LubanCat running Linux for debian10
#
include(../common/linux_device_pre.conf)
QMAKE_LIBS_EGL += -lEGL -lmali
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lEGL -lmali
QMAKE_CFLAGS = -march=armv8-a
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_LFLAGS += -static-libstdc++
QMAKE_INCDIR_POST += $$[QT_SYSROOT]/usr/include $$[QT_SYSROOT]/usr/include/$${GCC_MACHINE_DUMP}
QMAKE_LIBDIR_POST += $$[QT_SYSROOT]/usr/lib $$[QT_SYSROOT]/lib/$${GCC_MACHINE_DUMP} $$[QT_SYSROOT]/usr/lib/$${GCC_MACHINE_DUMP}
QMAKE_RPATHLINKDIR_POST += $$[QT_SYSROOT]/usr/lib $$[QT_SYSROOT]/usr/lib/$${GCC_MACHINE_DUMP} $$[QT_SYSROOT]/lib/$${GCC_MACHINE_DUMP}
DISTRO_OPTS += aarch64
DISTRO_OPTS += deb-multi-arch
include(../common/linux_arm_device_post.conf)
load(qt_config)
done...
start configure qt-everywhere-src-5.15.8...
+ cd qtbase
+ /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/configure -top-level -sysroot /home/yoooola/WorkSpace/rootfs -hostprefix /opt/qt-everywhere-src-5.15.8/host -extprefix /opt/qt-everywhere-src-5.15.8/ext -device linux-lubancat-g++ -device-option CROSS_COMPILE=/opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu- -release -opensource -confirm-license -nomake tests -make libs -opengl es2 -eglfs -xcb -dbus -syslog -sqlite -tslib -fontconfig -pkg-config -skip qtscript -skip qtwebengine -no-use-gold-linker -v -recheck-all
Creating qmake...
make: Nothing to be done for 'first'.
Command line: -sysroot /home/yoooola/WorkSpace/rootfs -hostprefix /opt/qt-everywhere-src-5.15.8/host -extprefix /opt/qt-everywhere-src-5.15.8/ext -device linux-lubancat-g++ -device-option CROSS_COMPILE=/opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu- -release -opensource -confirm-license -nomake tests -make libs -opengl es2 -eglfs -xcb -dbus -syslog -sqlite -tslib -fontconfig -pkg-config -skip qtscript -skip qtwebengine -no-use-gold-linker -v -recheck-all
This is the Qt Open Source Edition.
You have already accepted the terms of the Open Source license.
Running configuration tests...
Checking for machine tuple...
+ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -dumpmachine
> aarch64-linux-gnu
test config.qtbase.tests.machineTuple succeeded
Checking for valid makespec...
+ cd /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/config.tests/verifyspec && /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "QMAKE_CFLAGS += --sysroot=/home/yoooola/WorkSpace/rootfs" "QMAKE_CXXFLAGS += --sysroot=/home/yoooola/WorkSpace/rootfs" "QMAKE_LFLAGS += --sysroot=/home/yoooola/WorkSpace/rootfs" -early "CONFIG += cross_compile" /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec
+ cd /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/config.tests/verifyspec && MAKEFLAGS= /usr/bin/make clean && MAKEFLAGS= /usr/bin/make
> rm -f verifyspec.o
> rm -f *~ core *.core
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -c -march=armv8-a --sysroot=/home/yoooola/WorkSpace/rootfs --sysroot=/home/yoooola/WorkSpace/rootfs -O2 -w -fPIC -I/home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec -I. -I/home/yoooola/WorkSpace/rootfs/usr/include -I/home/yoooola/WorkSpace/rootfs/usr/include/aarch64-linux-gnu -I/home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/mkspecs/devices/linux-lubancat-g++ -o verifyspec.o /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec/verifyspec.cpp
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -static-libstdc++ --sysroot=/home/yoooola/WorkSpace/rootfs --sysroot=/home/yoooola/WorkSpace/rootfs -Wl,-O1 -Wl,-rpath-link,/home/yoooola/WorkSpace/rootfs/usr/lib -Wl,-rpath-link,/home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu -o verifyspec verifyspec.o -L/home/yoooola/WorkSpace/rootfs/usr/lib -L/home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu -L/home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crti.o: No such file or directory
> collect2: error: ld returned 1 exit status
> make: *** [Makefile:68: verifyspec] Error 1
Note: Also available for Linux: linux-clang linux-icc
ERROR: Cannot compile a minimal program. The toolchain or QMakeSpec is broken.
done...
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$
可以看到,主要的报错内容如下
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crti.o: No such file or directory
> collect2: error: ld returned 1 exit status
> make: *** [Makefile:68: verifyspec] Error 1
这些文件在两个文件夹下的相对位置分析
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ sudo find rootfs/ -name "crt1.o"
rootfs/usr/lib/aarch64-linux-gnu/crt1.o
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ sudo find sysroot/ -name "crt1.o"
sysroot/usr/lib/aarch64-linux-gnu/crt1.o
可以发现,两个文件在两个文件夹下的目录相同,可以说明,并不是文件不存在,而是编译脚本问题。
使用野火的官方库文件目录进行对比,看编译环境到底有什么区别
start configure platform...
#
# qmake configuration for the LubanCat running Linux for debian10
#
include(../common/linux_device_pre.conf)
QMAKE_LIBS_EGL += -lEGL -lmali
QMAKE_LIBS_OPENGL_ES2 += -lGLESv2 -lEGL -lmali
QMAKE_CFLAGS = -march=armv8-a
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_LFLAGS += -static-libstdc++
QMAKE_INCDIR_POST += $$[QT_SYSROOT]/usr/include $$[QT_SYSROOT]/usr/include/$${GCC_MACHINE_DUMP}
QMAKE_LIBDIR_POST += $$[QT_SYSROOT]/usr/lib $$[QT_SYSROOT]/lib/$${GCC_MACHINE_DUMP} $$[QT_SYSROOT]/usr/lib/$${GCC_MACHINE_DUMP}
QMAKE_RPATHLINKDIR_POST += $$[QT_SYSROOT]/usr/lib $$[QT_SYSROOT]/usr/lib/$${GCC_MACHINE_DUMP} $$[QT_SYSROOT]/lib/$${GCC_MACHINE_DUMP}
DISTRO_OPTS += aarch64
DISTRO_OPTS += deb-multi-arch
include(../common/linux_arm_device_post.conf)
load(qt_config)
done...
start configure qt-everywhere-src-5.15.8...
+ cd qtbase
+ /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/configure -top-level -sysroot /home/yoooola/WorkSpace/sysroot -hostprefix /opt/qt-everywhere-src-5.15.8/host -extprefix /opt/qt-everywhere-src-5.15.8/ext -device linux-lubancat-g++ -device-option CROSS_COMPILE=/opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu- -release -opensource -confirm-license -nomake tests -make libs -opengl es2 -eglfs -xcb -dbus -syslog -sqlite -tslib -fontconfig -pkg-config -skip qtscript -skip qtwebengine -no-use-gold-linker -v -recheck-all
Creating qmake...
make: Nothing to be done for 'first'.
Command line: -sysroot /home/yoooola/WorkSpace/sysroot -hostprefix /opt/qt-everywhere-src-5.15.8/host -extprefix /opt/qt-everywhere-src-5.15.8/ext -device linux-lubancat-g++ -device-option CROSS_COMPILE=/opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu- -release -opensource -confirm-license -nomake tests -make libs -opengl es2 -eglfs -xcb -dbus -syslog -sqlite -tslib -fontconfig -pkg-config -skip qtscript -skip qtwebengine -no-use-gold-linker -v -recheck-all
This is the Qt Open Source Edition.
You have already accepted the terms of the Open Source license.
Running configuration tests...
Checking for machine tuple...
+ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -dumpmachine
> aarch64-linux-gnu
test config.qtbase.tests.machineTuple succeeded
Checking for valid makespec...
+ cd /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/config.tests/verifyspec && /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" "QMAKE_CFLAGS += --sysroot=/home/yoooola/WorkSpace/sysroot" "QMAKE_CXXFLAGS += --sysroot=/home/yoooola/WorkSpace/sysroot" "QMAKE_LFLAGS += --sysroot=/home/yoooola/WorkSpace/sysroot" -early "CONFIG += cross_compile" /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec
+ cd /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/config.tests/verifyspec && MAKEFLAGS= /usr/bin/make clean && MAKEFLAGS= /usr/bin/make
> rm -f verifyspec.o
> rm -f *~ core *.core
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -c -march=armv8-a --sysroot=/home/yoooola/WorkSpace/sysroot --sysroot=/home/yoooola/WorkSpace/sysroot -O2 -w -fPIC -I/home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec -I. -I/home/yoooola/WorkSpace/sysroot/usr/include -I/home/yoooola/WorkSpace/sysroot/usr/include/aarch64-linux-gnu -I/home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/mkspecs/devices/linux-lubancat-g++ -o verifyspec.o /home/yoooola/WorkSpace/qt-everywhere-src-5.15.8/qtbase/config.tests/verifyspec/verifyspec.cpp
> /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-g++ -static-libstdc++ --sysroot=/home/yoooola/WorkSpace/sysroot --sysroot=/home/yoooola/WorkSpace/sysroot -Wl,-O1 -Wl,-rpath-link,/home/yoooola/WorkSpace/sysroot/usr/lib -Wl,-rpath-link,/home/yoooola/WorkSpace/sysroot/usr/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/sysroot/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/sysroot/usr/lib/aarch64-linux-gnu -Wl,-rpath-link,/home/yoooola/WorkSpace/sysroot/lib/aarch64-linux-gnu -o verifyspec verifyspec.o -L/home/yoooola/WorkSpace/sysroot/usr/lib -L/home/yoooola/WorkSpace/sysroot/lib/aarch64-linux-gnu -L/home/yoooola/WorkSpace/sysroot/usr/lib/aarch64-linux-gnu
test config.qtbase.tests.verifyspec succeeded
Checking for target architecture...
1.3 一点点小观察
从机器获取到的文件的权限是 root root, 不是 yoooola yoooola。尝试从机器重新拷贝文件:
# 首先要改变文件的权限
# 我这里直接删除rootfs文件夹,然后重新以非管理员用户创建文件
sudo rm -rf ~/WorkSpace/rootfs
mkdir -p ~/WorkSpace/rootfs
# 从嵌入式机器上导入库文件,以cat用户读取文件
rsync -avx cat@192.168.50.113:/ ~/WorkSpace/rootfs
1.4 再次观察
yoooola@HR000000299:~/WorkSpace/lubanCat/rootFS/lib$ ll
总用量 8
drwxr-xr-x 2 yoooola yoooola 4096 7月 22 20:18 ./
drwxr-xr-x 4 yoooola yoooola 4096 7月 22 20:17 ../
lrwxrwxrwx 1 yoooola yoooola 7 7月 1 2024 lib -> usr/lib
# 但是这里的链接错了,应该指向../usr/lib
# 去开发版上查看
cat@lubancat:/$ ls -l
total 5640
lrwxrwxrwx 1 root root 7 Jul 1 2024 bin -> usr/bin
drwxr-xr-x 7 root root 4096 Feb 14 18:12 boot
drwxr-xr-x 17 root root 4100 Feb 14 18:26 dev
drwxrwxr-x 110 1001 1001 4096 Jul 19 2025 etc
drwxr-xr-x 3 1001 1001 4096 Sep 4 2023 home
lrwxrwxrwx 1 root root 7 Jul 1 2024 lib -> usr/lib
...
lrwxrwxrwx 1 root root 8 Jul 1 2024 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Jul 1 2024 srv
...
drwxrwxr-x 10 1001 1001 4096 Feb 14 18:12 usr
# 可以明确看到,lib -> usr/lib
所以,我猜,需要改变编译服务器的文件夹的指向
yoooola@HR000000299:~/WorkSpace/lubanCat/rootFS$ rm lib
yoooola@HR000000299:~/WorkSpace/lubanCat/rootFS$ ln -sf usr/lib/ lib
yoooola@HR000000299:~/WorkSpace/lubanCat/rootFS$ ll
总用量 12
drwxr-xr-x 3 yoooola yoooola 4096 7月 22 22:02 ./
drwxr-xr-x 5 yoooola yoooola 4096 7月 22 21:55 ../
lrwxrwxrwx 1 yoooola yoooola 8 7月 22 22:02 lib -> usr/lib//
drwxr-xr-x 4 yoooola yoooola 4096 7月 22 20:18 usr/
改变完以后
# 改变链接前
yoooola@HR000000299:~/WorkSpace/lubanCat$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc \
oooola/WorkSpace> --sysroot=/home/yoooola/WorkSpace/lubanCat/rootFS \
oola/WorkSpace/lubanCat/rootFS/u> -L/home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/aarch64-linux-gnu \
> -Wl,-rpath-link=/home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/aarch64-linux-gnu \
t> test.c -o test
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: 没有那个文件或目录
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crti.o: 没有那个文件或目录
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find /lib/aarch64-linux-gnu/libc.so.6 inside /home/yoooola/WorkSpace/lubanCat/rootFS
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find /lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 inside /home/yoooola/WorkSpace/lubanCat/rootFS
collect2: 错误: ld 返回 1
# 改变链接后
yoooola@HR000000299:~/WorkSpace/lubanCat$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc --sysroot=/home/yoooola/WorkSpace/lubanCat/rootFS -L/home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/aarch64-linux-gnu -Wl,-rpath-link=/home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/aarch64-linux-gnu test.c -o test
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: 没有那个文件或目录
/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crti.o: 没有那个文件或目录
collect2: 错误: ld 返回 1
# 创建测试的编译文件
yoooola@HR000000299:~/WorkSpace/lubanCat$ echo 'int main() { return 0; }' > test.c
yoooola@HR000000299:~/WorkSpace/lubanCat$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc \
oooola/WorkSpace> --sysroot=/home/yoooola/WorkSpace/lubanCat/rootFS \
> -Wl,--verbose \
> test.c -o test 2>&1 | grep "attempt to open"
attempt to open crt1.o failed
attempt to open crti.o failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtbegin.o succeeded
attempt to open /tmp/ccYQLa54.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/aarch64-linux-gnu/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/aarch64-linux-gnu/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/local/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/local/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/aarch64-linux-gnu/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/aarch64-linux-gnu/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/local/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/local/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtend.o succeeded
attempt to open crtn.o failed/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: 没有那个文件或目录
# deepseek分析如下
# 从你的 -Wl,--verbose 输出可见,工具链在以下路径中搜索失败:
attempt to open crt1.o failed
attempt to open crti.o failed
attempt to open /home/yoooola/WorkSpace/lubanCat/rootFS/usr/lib/libc.so failed
attempt to open crtn.o failed
还是有问题,既然文件系统是在debian里面链接过去的,我想直接从底层硬链接过来如何
mkdir -p /home/yoooola/WorkSpace/lubanCat/rootFS/lib
rsync -avz --rsync-path="sudo rsync" --delete cat@192.168.0.113:/usr/lib /home/yoooola/WorkSpace/lubanCat/rootFS/lib
symlinks -rc ~/WorkSpace/lubanCat/rootFS
问题依旧
1.5 转变思路,对比成功和失败的路径的两者差异
拿可以进行编译的根目录环境和不能编译的根目录环境进行对比,看看问题出在哪里
# 自己从机器上拿到的环境
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc --sysroot=/home/yoooola/WorkSpace/rootfs -Wl,--verbose test.c -o test 2>&1 | grep "attempt to open"
attempt to open crt1.o failed
attempt to open crti.o failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtbegin.o succeeded
attempt to open /tmp/ccjijhhB.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/../lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/../lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/../lib64/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtend.o succeeded
attempt to open crtn.o failed/opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory
# 从可以编译的rootfs上进行编译
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc --sysroot=/home/yoooola/WorkSpace/rootfs -Wl,--verbose test.c -o test 2>&1 | grep "attempt to open"
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crt1.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crti.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtbegin.o succeeded
attempt to open /tmp/ccPPhUtQ.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/libc.so succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/libc.so.6 succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu/libc_nonshared.a succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtend.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crtn.o succeeded
显著区别如下
# 失败的库文件查找路径
attempt to open /home/yoooola/WorkSpace/rootfs/lib/../lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/../lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib64/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/aarch64-linux-gnu/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/local/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.so failed
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/libc.a failed
# 成功的库文件路径
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crt1.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crti.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/libc.so succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/libc.so.6 succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu/libc_nonshared.a succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crtn.o succeeded
所以,得出结论
- 失踪的
crt1.o
,crti.o
,libc.so
,crtn.o
是在系统目录下找到的 - 是在这个目录下找到
lib/aarch64-linux-gnu/8.3.0
继续排查自己是否有这个目录
# 野火官方的系统
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs$ ls -l ~/WorkSpace/sysroot/usr/lib/aarch64-linux-gnu/8.3.0
lrwxrwxrwx 1 yoooola yoooola 21 Jul 10 2023 /home/yoooola/WorkSpace/sysroot/usr/lib/aarch64-linux-gnu/8.3.0 -> ../aarch64-linux-gnu/
# 自己从机器上同步的库文件,没有
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs$ ls usr/lib/aarch64-linux-gnu/8.3.0
ls: cannot access 'usr/lib/aarch64-linux-gnu/8.3.0': No such file or directory
# 去机器上看,也米有
cat@lubancat:/usr/lib/aarch64-linux-gnu$ ls 8.3.0
ls: cannot access '8.3.0': No such file or directory
所以是不是这里的问题呢?
# 手动链接一下
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu$ sudo ln -s ../aarch64-linux-gnu 8.3.0
[sudo] password for yoooola:
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu$ ls -l 8.3.0
lrwxrwxrwx 1 root root 20 Jul 23 00:39 8.3.0 -> ../aarch64-linux-gnu
# 再次编译,成功
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc --sysroot=/home/yoooola/WorkSpace/rootfs -Wl,--verbose test.c -o test 2>&1 | grep "attempt to open"
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crt1.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crti.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtbegin.o succeeded
attempt to open /tmp/cc8reunE.o succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libc.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/libc.so succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/libc.so.6 succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/usr/lib/aarch64-linux-gnu/libc_nonshared.a succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc.a succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/../../../../aarch64-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/gcc-aarch64-linux-gnu-8.3.0/bin/../lib/gcc/aarch64-linux-gnu/8.3.0/crtend.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs/lib/aarch64-linux-gnu/8.3.0/crtn.o succeeded
问题解决
# 同理,如果使用aarch64-none-linux-gnu-10.2.1工具直接编译会失败
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/aarch64-none-linux-gnu-10.2.0/bin/aarch64-none-linux-gnu-gcc --sysroot=/home/yoooola/WorkSpace/rootfs -Wl,--verbose test.c -o test 2>&1 | grep "attempt to open"
attempt to open crt1.o failed
attempt to open crti.o failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/crtbegin.o succeeded
attempt to open /tmp/ccUAwAuW.o succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so.1 succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.0/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
# 但是对roofs_debian11进行改造
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs_debian11/lib/aarch64-linux-gnu$ ln -s ../aarch64-linux-gnu 10.2.1
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace/rootfs_debian11/lib$ ln -s aarch64-linux-gnu aarch64-none-linux-gnu、
# 检查软连接结果
yoooola@LAPTOP-7RPMJTMK:~$ ls -l ~/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1
lrwxrwxrwx 1 yoooola yoooola 20 Jul 23 01:12 /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1 -> ../aarch64-linux-gnu
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ ls -l ~/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu
lrwxrwxrwx 1 yoooola yoooola 17 Jul 23 01:17 /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu -> aarch64-linux-gnu
# 再次进行编译尝试,成功
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/aarch64-none-linux-gnu-10.2.1/bin/aarch64-none-linux-gnu-gcc --sysroot=/home/yoooola/WorkSpace/rootfs_debian11 -Wl,--verbose test.c -o test 2>&1 | grep "attempt to open"
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1/crt1.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1/crti.o succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/crtbegin.o succeeded
attempt to open /tmp/ccxO7iuJ.o succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so.1 succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libc.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libc.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libc.a failed
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1/libc.so succeeded
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-linux-gnu/libc.so.6 succeeded
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/usr/lib/aarch64-linux-gnu/libc_nonshared.a succeeded
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/ld-linux-aarch64.so.1 succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libgcc_s.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/libgcc_s.a failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/../../../../aarch64-none-linux-gnu/lib/../lib64/libgcc_s.so.1 succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.so failed
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/libgcc.a succeeded
attempt to open /opt/aarch64-none-linux-gnu-10.2.1/bin/../lib/gcc/aarch64-none-linux-gnu/10.2.1/crtend.o succeeded
attempt to open /home/yoooola/WorkSpace/rootfs_debian11/lib/aarch64-none-linux-gnu/10.2.1/crtn.o succeeded
# 但是要注意的是include也得链接一下
yoooola@LAPTOP-7RPMJTMK:~$ ln -s ~/WorkSpace/rootfs_debian11/usr/include/aarch64-linux-gnu ~/WorkSpace/rootfs_debian11/usr/include/aarch64-none-linux-gnu
yoooola@LAPTOP-7RPMJTMK:~$ ls -l ~/WorkSpace/rootfs_debian11/usr/include/aarch64-none-linux-gnu
lrwxrwxrwx 1 yoooola yoooola 17 Jul 23 01:40 /home/yoooola/WorkSpace/rootfs_debian11/usr/include/aarch64-none-linux-gnu -> ~/WorkSpace/rootfs_debian11/usr/include/aarch64-linux-gnu
2. 问题总结
应该是路径理解问题
4. 期间遇到的错误与解决方法
4.1 cc1文件权限错误
# 报错如下
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ /opt/gcc-aarch64-linux-gnu-8.3.0/bin/aarch64-linux-gnu-gcc --sysroot=/home/yoooola/WorkSpace/rootfs -Wl,--verbose test.c -o test 2>&1
aarch64-linux-gnu-gcc: error trying to exec 'cc1': execvp: No such file or directory
# 给与执行权限
yoooola@LAPTOP-7RPMJTMK:~/WorkSpace$ sudo chown -R $USER:$USER /opt/gcc-aarch64-linux-gnu-8.3.0