在 armv7l 架构上执行二进制文件时解释器失败

在 armv7l 架构上执行二进制文件时解释器失败

我在 armv7l 架构中执行二进制文件时遇到问题。我交叉编译了我的程序你好.cpp在我的电脑上 Linux Ubuntu 18.04

arm-linux-gnueabihf-g++ hello.cpp -o hello

然后我将其安全地复制到我的设备并尝试运行它,但收到一条错误消息:

-sh: ./hello: not found

但是当我包括-静止的进入我的交叉编译

arm-linux-gnueabihf-g++ hello.cpp -o hello -static

程序运行正常。

在 Linux APSA30F59 4.14.36 armv7l 中执行该文件时,如果没有-静止的旗帜?

包括什么-静止的在编译时?

答案1

编译时,ubuntu 为设备上的解释器创建了错误的链接器。通过运行命令

patchelf --print-interpreter hello

设备中的库的输出是错误的。

/lib/ld-linux-armhf.so.3

我把它改成了正确的

patchelf --set-interpreter /lib/ld-linux.so.3 hello

并且程序成功运行。

替代解决方案是从程序解释器到设备上的正确解释器建立软链接。

ln /lib/ld-linux-armhf.so.3 ld-linux.so.3

我猜这与编译器版本不匹配有关。如果我错了,请纠正我。

相关内容