2016年12月7日 星期三

Cross-compile程式之後,放到板子上執行,卻顯示"/bin/ash: ./phyAccess: not found"(以我編譯phyAccess工具為範例)

今天編譯phyAccess tool準備要測試網路功能,編譯完成之後,放到板子執行時卻出現以下的錯誤訊息:
     



於是我先回到編譯的ubuntu電腦上使用file看一下編譯完成的檔案,是把程式編譯成甚麼CPU架構的,確認是ARM的無誤:




另外注意到了這個執行檔編譯完成後,是屬於dynamically linked(用file可看到如上圖),因此我用 readelf -l phyAccess | grep "program interpreter"(readelf -d phyAccess 也可看出需要哪些library) 來看看他動態連結了哪些library,發現他需要"ld-linux.so.3"的library(如下圖)
    



原來無法在板子上執行,是因為板子上缺少了這個library,因此最後的解決方法就是,編譯的時候在Makefile的 CFLAG參數裡面加上 -static(編譯成靜態)就解決此問題了。

沒有留言:

張貼留言