【发布时间】:2019-06-05 15:17:54
【问题描述】:
我想为 armhf 架构交叉编译软件 (libdrm-armada)。我有包含所需共享对象的根文件系统 (~/rootfs)。该文件系统将被刷入 eMMC 并在自定义设备上运行。 Libdrm-armada 使用配置脚本来生成 Makefile。当我运行./configure 时,它会因为找不到共享对象而退出。
--with-sysroot、LD_LIBRARY_PATH、LIBRARY_PATH、LIBS、PKG_CONFIG_LIBDIR、LIBDRM_LIBS 参数不起作用。
./configure --build=x86_64-linux --host=arm-linux\
--prefix=~/test \
LDFLAGS=-L~/rootfs/usr/lib/arm-linux-gnueabihf\
CFLAGS=-I~/rootfs/usr/include \
CC=~/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
我试图解决的错误在 config.log 中显示为:
...
configure:3269: /home/user/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -I/home/user/rootfs/usr/include -L/home/user/rootfs/usr/lib/arm-linux-gnueabihf conftest.c >&5
/home/user/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.3.1/../../../../arm-linux-gnueabihf/bin/ld: cannot find /lib/arm-linux-gnueabihf/libc.so.6
/home/user/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.3.1/../../../../arm-linux-gnueabihf/bin/ld: cannot find /usr/lib/arm-linux-gnueabihf/libc_nonshared.a
/home/user/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/6.3.1/../../../../arm-linux-gnueabihf/bin/ld: cannot find /lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
collect2: error: ld returned 1 exit status
...
我应该如何正确编译软件并安装到~/rootfs?
编辑(感谢 Basile!):
您可以通过查看 git 存储库来调查源代码。
git clone git://git.armlinux.org.uk/~rmk/libdrm-armada.git/;
cd libdrm-armada/;
mkdir m4;自动重新配置 -f -i;
./configure --build=[.. 等等..]
请注意,配置脚本会生成 Makefile。如果您运行上面的 ./configure 命令,错误将存储在名为 config.log 的文件中。
【问题讨论】:
-
Edit你的问题请显示一些minimal reproducible example,包括你的
Makefile -
你能运行一个简单的 printf("hello world") 程序作为冒烟测试吗?可能某些核心文件已损坏
-
@NiallJG 我使用编译器构建各种 Linux 内核,它们都运行良好。配置脚本运行测试“int main() { ; return 0; }”,由于缺少对象而失败。
标签: gcc cross-compiling ld configure rootfs