gpt4 book ai didi

c++ - 尝试在目标设备上运行交叉编译的可执行文件失败并显示 : No such file or directory

转载 作者:可可西里 更新时间:2023-11-01 15:40:02 24 4
gpt4 key购买 nike

我陷入了不太阳光的交叉编译世界。

我正在尝试为我的 BeagleBone Black(运行 TI Cortex-A8 处理器)编译一个简单的 hello world 应用程序。

首先,我用gcc在x86上编译并成功运行了hello world应用程序

然后我将编译设置更改为以下内容:

arm-linux-gnueabi-gcc -c -O0 -g3 -Wall main.c -o bin/obj/main.o
arm-linux-gnueabi-gcc bin/obj/main.o -o bin/hello_world

我通过 SCP 将文件传输到 BeagleBone,并使用 chmod +x hello_world 设置了可执行权限

运行它(./hello_world)后,我唯一的 react 是:

-bash: ./hello_world: No such file or directory

file 的输出与 /sbin/init 的输出符合我的预期:

$ file hello_world
hello_world: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x24b659b7a41fe043a6f4649d4ebfb5e692ebf0c7, not stripped
$ file /sbin/init
/sbin/init: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xd21f6957ec031a27d567b3d5e6aa14b9e0c30c37, stripped

ldd 的结果是:

$ ldd hello_world
not a dynamic executable

我尝试添加合适的平台和 CPU 类型,将我的编译更改为:

arm-linux-gnueabi-gcc -c -O0 -g3 -Wall -march=armv7-a -mtune=cortex-a8  main.c -o bin/obj/main.o
arm-linux-gnueabi-gcc bin/obj/main.o -o bin/hello_world

这最初开始给我一个新的错误:Text file busy,但我已经无法再次恢复该错误,因为它现在返回 No such file or directory。我猜那个特定的尝试只是一个错误的传输或其他什么。

最佳答案

由于评论中没有人发布答案,我想我很高兴 ;)

No such file or directory当内核试图调用由 ELF 可执行文件的 .interp 指定的动态链接器时产生。字段,但不存在这样的文件。

.interp可以使用以下命令找到字段:

objdump -j .interp -s ./hello_world

在此示例中,可执行文件的 .interp字段是 /lib/ld-linux.so.3 , 但 BeagleBone Black 上动态链接器的名称是 /lib/ld-linux-armhf.so.3 .

发生这种情况是因为该程序是使用与平台所需的工具链略有不同的工具链编译的。 应该是arm-linux-gnueabihf-*而不是 arm-linux-gnueabi-* .

两者之间的区别在于,Cortex-A8 使用特定的浮点寄存器与 EABI 的硬浮点版本 (armhf),而原始 EABI (armel) 使用整数寄存器来传递 float 点数。结果,armel程序将在 armhf 上运行(前提是动态链接器设置为正确的路径!),但反之则不然。

简单地添加一个符号链接(symbolic link)ln -s /lib/ld-linux-armhf.so.3 /lib/ld-linux.so.3足以解决此问题,但正确的解决方法是首先在编译程序时使用正确的工具链。

关于c++ - 尝试在目标设备上运行交叉编译的可执行文件失败并显示 : No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com