ARM上運(yùn)行可執(zhí)行程序出現(xiàn)No such file or directory的問(wèn)題
問(wèn)題:
使用arm-none-linux-gnueabi-gcc –o hello hello.c編譯完成,在ARM上運(yùn)行出現(xiàn)報(bào)錯(cuò):
-sh: ./hello: No such file or directory
原因:
因?yàn)槲覀兊某绦蚴褂玫氖莿?dòng)態(tài)鏈接方式編譯的,而ARM上的鏈接庫(kù)文件路徑不同,導(dǎo)致找不到文件,可以用gcc-static命令改用靜態(tài)鏈接的方式編譯:
arm-none-linux-gnueabi-gcc –o hello hello.c -static
編譯器的架構(gòu)有差
這是發(fā)生在一次新的開(kāi)發(fā)板的交叉編譯中產(chǎn)生的,同樣的程序用同樣的工具鏈編譯后,一個(gè)開(kāi)發(fā)板正常,二另一個(gè)報(bào)No such file or directory,文件明明存在,這個(gè)問(wèn)題在于arm-Linux-guneabi-和arm-linux-guneabihf-這兩個(gè)鏈的差別在于hf二字,這個(gè)是浮點(diǎn)單元的支持與否,選擇錯(cuò)誤會(huì)導(dǎo)致上述錯(cuò)誤發(fā)生。
用uname -a查看ARM的架構(gòu)和Linux版本,舉例:
root@imx6qsabresd:~# uname -a
Linux imx6qsabresd 3.14.28-1.0.0_ga+g91cf351 #14 SMP PREEMPT Tue Apr 25 16:25:22 CST 2017 armv7l GNU/Linux
查看執(zhí)行程序的屬性,舉例:
zhao@zhao-VirtualBox:/home/nfs/file/ntp$ file ntpdate
ntpdate: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped
以上的情況就無(wú)法執(zhí)行,顯示“No such file or directory”,然后通過(guò)更換GCC成功了。新版本:
gcc-linaro-arm-linux-gnueabihf-4.9-2014.07_linux.tar.xz