2012-11-27 54 views
26

我使用Android GCC工具鏈(純linux,沒有android或NDK)構建了本機linux ARM二進制文件。「沒有這樣的文件或目錄」試圖在Android設備上執行linux二進制

我通過adb外殼連接到運行Android 4的平板電腦。 我「adb push」將該二進制文件編輯到該設備上的/ system/bin目錄中,希望能在該設備上執行它。我用chmod 777標記了可執行文件。

如果我嘗試執行它,我會得到「沒有這樣的文件或目錄」。

更多信息: 小程序使用fc和fm庫。由於ARM工具鏈似乎沒有crt1,從我發現的例子來看,它通常包含啓動代碼,我們搜索了包含它在android版本中的文件,找到了crtbegin_dynamic和crtend_dynamic,但是對於_static等價的,其中一個失蹤了,所以我沒有通過GCC的靜態。它是用「-nostdlib」構建的。

可能是什麼問題?

+4

您需要使用nm或類似命令來查找可執行文件的依賴關係,但實際上您應該只使用NDK gcc來爲Android構建,除非您堅持以艱苦的方式執行操作。 **請注意,這個問題與開發機器**缺少的庫無關,儘管神祕地吸引了關於完全不同主題的流行答案。 –

回答

49

如果您正在使用64位平臺(如Ubuntu 64),那麼此提示可能會幫助您解決問題。還是想簡單地用 apt-get的安裝i386的32位兼容性庫:

sudo apt-get install ia32-libs 

這對我來說真是棒極了。讓我知道你是否陷入同樣的​​困境。

爲Ubuntu 13.10或更高

隨着阿迪亞在評論這個回答說:

隨着Ubuntu的13.10的,一個現在已經運行此: sudo apt-get install lib32z1,您可能需要獲得C++ stdlib之間也是如此,這一點:sudo apt-get install lib32ncurses5 lib32stdc++6

+3

我可以繼續這個。 –

+0

修復問題! –

+11

從Ubuntu 13.10開始,看起來像ia32-libs已被下面的包所取代。一個人現在運行此: '命令和apt-get安裝lib32z1' 我不得不在C++ stdlib之間也是如此,這一點: '命令和apt-get安裝lib32ncurses5 lib32stdC++ 6' – aditya

2

要修改上述阿迪亞的評論,你也可以使用下面的C++ stdlib之間在Ubuntu 13.10:

sudo apt-get install lib32ncurses5 libstdc++6:i386 
+2

這與問題無關,涉及在Android本身上運行可執行文件 - 一種不使用debian打包系統的Linux。 –

相關問題