我在 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
我猜这与编译器版本不匹配有关。如果我错了,请纠正我。