ARM Linux應用程序not found 問題

今天,移植 openssh-portable 到imx6ul板子上,交叉編譯OK。

 

放板子上執行,除錯。

 

root@imx6ulevk:/mnt/nfs/ssh# ./ssh-keygen
-sh: ./ssh-keygen: not found

 

root@imx6ulevk:/mnt/nfs/ssh# ./scp
-sh: ./scp: not found

 

問題

  • 在板子上執行應用程序時報錯 -/bin/ash: ./xxx not found

解決方法:

  • 在搭建了交叉編譯工具的平臺上用交叉編譯工具自帶的readelf查看該應用程序需要的動態鏈接庫和program interpreter
  • 查看動態鏈接庫 arm-..-linux-..-readelf -d test 
    這裏寫圖片描述

Shared library 爲所需的庫,可以在板子上 cd /lib 查看 /lib 目錄下是否有這些需要的庫,同時有的依賴庫時可能在該應用程序自身文件目錄下

  • 查看program interpreter arm-..-linux-..-readelf -l test 
  • è¿éåå¾çæè¿°
  • 該應用程序需要的就是 ld-linux-armhf.so.3這個庫。應用程序not found 很多時候是interpreter的原因。 
    在交叉編譯時,可以給gcc加上 -muclibc ,就更改了interpreter,但是這種方法我還沒試過。 
    另一種方法是用ln指令把 ld-2.13.so (/lib下的一個庫,可能版本不一樣) 連接到 ld-linux-armhf.so.3 上,即 ln -s /lib/ld-2.13.so /lib/ld-linux-armhf.so.3 之後就發現應用程序就可以運行了。

第一種方法使用於,源碼已知的情況,第二種方法適用於應用程序源碼未知,並且更方便快速。

 

經過對比,發現板子運行環境沒有所需的interpreter。

解決辦法:將/lib/ld-xxx.so, 連接到對應的so

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章