2012-11-27 10 views
26

Ho creato un binario nativo ARM di linux utilizzando la toolchain GCC Android (plain linux, no android o NDK)."Nessun file o directory" che tenta di eseguire binario linux sul dispositivo Android

Mi sono connesso, dal mio PC, tramite adb shell, a un tablet con Android 4. I "adb push" "ed il file binario in/system/bin su quel dispositivo, sperando che lo facessi eseguire lì. L'ho contrassegnato come eseguibile con chmod 777.

Se provo ad eseguirlo, otterrei "Nessun file o directory".

Ulteriori informazioni: Il piccolo programma utilizza le librerie fc e fm. Poiché la toolchain ARM non sembra avere crt1, che, da un esempio trovato, contiene normalmente il codice di avvio, abbiamo cercato tra i file che lo contengono nella build di Android, trovato crtbegin_dynamic e crtend_dynamic, ma per equivalente statico, uno della coppia mancava, quindi non passai -statico a GCC. È stato creato con "-nostdlib".

Quale potrebbe essere il/i problema/i?

+4

È necessario utilizzare nm o simile per trovare le dipendenze del file eseguibile, ma in realtà è necessario utilizzare solo NDK gcc per costruire per Android a meno che non si insista a fare le cose nel modo più difficile. ** Si prega di notare che questa domanda non ha nulla a che fare con le librerie mancanti per la macchina di sviluppo **, nonostante abbia misteriosamente attratto una risposta popolare su questo argomento completamente diverso. –

risposta

49

Se si sta lavorando su una piattaforma a 64 bit come Ubuntu 64, questo suggerimento può aiutare a risolvere il problema. Basta cercare di ottenere l'i386 librerie di compatibilità a 32 bit installate semplicemente con apt-get:

sudo apt-get install ia32-libs 

ha funzionato grande per me. Fammi sapere se sei bloccato nello stesso problema.

Per Ubuntu 13.10 o superiore

Come ha detto Aditya nei commenti a questa risposta:

Come di Ubuntu 13.10, si deve eseguire questo ora: sudo apt-get install lib32z1, potrebbe essere necessario per ottenere il C++ stdlibs troppo, con questo: sudo apt-get install lib32ncurses5 lib32stdc++6

+3

Posso secondare questo. –

+0

Risolve il problema! –

+11

A partire da Ubuntu 13.10, sembra che ia32-libs sia stato sostituito dal seguente pacchetto. Si deve eseguire questo ora: 'sudo apt-get install lib32z1' ho dovuto ottenere il C++ stdlibs troppo, con questo: ' sudo apt-get install lib32ncurses5 lib32stdC++ 6' – aditya

2

di modificare il commento di Aditya sopra, è anche possibile utilizzare il seguente per le stdlibs C++ in Ubuntu 13.10:

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

Questo non ha nulla a che fare con la domanda posta, che riguarda l'esecuzione di un eseguibile su Android stesso - un linux che non utilizza il sistema di packaging debian. –

Problemi correlati