如何解决交叉编译内核工具,即使正确设置了-L也找不到-lelf
我试图在amd64机器上为armhf交叉编译官方Debian内核的修改版本。我正在使用Debian Wiki上的HowToCrossBuildAnOfficialDebianKernelPackage说明。
内核本身可以很好地构建,但是在尝试为ld
软件包构建objtool
时,我从linux-kbuild
收到一个错误:
# make -f debian/rules.real build-kbuild KBUILD_HOSTLDFLAGS="-L/usr/lib/arm-linux-gnueabihf"
[...]
arm-linux-gnueabihf-gcc /usr/src/linux.buster-backports/debian/build/build-tools/tools/objtool/objtool-in.o -lelf /usr/src/linux.buster-backports/debian/build/build-tools/tools/objtool/libsubcmd.a -L/usr/lib/arm-linux-gnueabihf -o /usr/src/linux.buster-backports/debian/build/build-tools/tools/objtool/objtool
/usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lelf
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:67: /usr/src/linux.buster-backports/debian/build/build-tools/tools/objtool/objtool] Error 1
您可以看到make
确实向-L/usr/lib/arm-linux-gnueabihf
添加了gcc
标志。并且/usr/lib/arm-linux-gnueabihf
确实包含libelf
:
# ls -l /usr/lib/arm-linux-gnueabihf/libelf*
-rw-r--r-- 1 root root 67296 May 28 2019 /usr/lib/arm-linux-gnueabihf/libelf-0.176.so
lrwxrwxrwx 1 root root 15 May 28 2019 /usr/lib/arm-linux-gnueabihf/libelf.so.1 -> libelf-0.176.so
# file /usr/lib/arm-linux-gnueabihf/libelf-0.176.so
/usr/lib/arm-linux-gnueabihf/libelf-0.176.so: ELF 32-bit LSB shared object,ARM,EABI5 version 1 (SYSV),dynamically linked,BuildID[sha1]=51d60560aa6c0538f0bf34c07e4e2bc230c00834,stripped
我这样安装libelf
:
dpkg --add-architecture armhf
apt-get update
apt-get install libelf1:armhf
正在使用的ld
似乎是给手臂用的:
# /usr/lib/gcc-cross/arm-linux-gnueabihf/8/../../../../arm-linux-gnueabihf/bin/ld -V
GNU ld (GNU Binutils for Debian) 2.31.1
Supported emulations:
armelf_linux_eabi
armelfb_linux_eabi
我很困惑。如何获得ld
链接libelf
?
解决方法
链接器的libelf-0.176.so
选项不会搜索libelf.so.1
和-lelf
。您仍然需要libelf.so
文件。可以创建此文件:
- 通过安装
libelf-dev
软件包(通常,具有完全.so
的库由*-dev
软件包安装)。确保选择适合交叉编译的软件包。 - 通过创建符号链接
libelf.so
指向您拥有的libelf-0.176.so
文件。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。