2012-09-19 32 views
13

我正在尋找在Android 4.1(Jelly Bean)上運行本機ARM可執行文件的方法。例如,編譯經典的C程序在Jelly Bean上運行本機ARM可執行文件

// hello.c 
#include <stdio.h> 
int main() { 
    printf("Hello world"); 
} 

到ARMv7a可執行文件,說hello使用Android NDK,然後在Android的殼運行它。我曾嘗試的方法在網絡上建議如

adb push hello /data/local 

變更許可推可執行/data/local,使其能夠通過

adb shell chmod 755 /data/local/hello 

被執行,然後使用調用它們的外殼

adb shell /data/local/hello 

最後一步失敗,出現錯誤:

/data/local/hello: not found 

但顯然文件在那裏。我懷疑問題是,果凍豆的外殼不允許執行外星人二進制文件了。任何人都可以證實這一點並給我一個解決方案

+3

這不是一個針對Android問題的編程,只要我可以看到。我相信這對於硬核Android用戶來說是有意義的。 – ale

+0

@ Chahak謝謝。但是,我不認爲它回答了我原來的問題。最終,我想通過交叉編譯或使用ARM預構建版本運行'dd'等程序。現在我回想起在系統上安裝新二進制文件的'busybox'和'kbox',所以我相信這裏沒有安全問題。我會檢查這些工作,看看他們是如何做到的。 –

+3

@Chahk - 鑑於堆棧溢出問題是從2011年10月開始的,因此回答了未指定的舊版Android,Jelly Bean *的答案可能會不同。提問者確實希望有人確認它是否是真實的,這是一個關於Android的實際可回答的問題。 –

回答

6

如果您想在Android中運行本機ARM二進制文件,您必須編譯-static

的libc,你用它來構建(如果使用的是標準的ARM工具鏈,而不是Android的NDK)是Android的的libc(仿生),因此不同的,當你的二進制打算目標動態鏈接到的libc它不會因爲libc不存在於目標上。

與你從你的libc 需要在構建時有什麼聯繫,不要擔心在動態鏈接事情-static選項。

0

檢查adb push沒有轉儲「Permission denied」錯誤。通過運行檢查文件的存在:adb shell ls/data/local

由於我更新到4.0.4,我無法訪問/ data/local而是訪問/ data/local/tmp,這會解釋「找不到「錯誤。

+0

我通過安裝Google的NDK獨立工具鏈解決了這個問題,並用它重新編譯了源代碼。應該有一些神祕的東西,工具鏈在底層做。 –

相關問題