Collegamento statico di Android o collegamento dinamico con glibc

Ho eseguito la compilazione di alcuni strumenti Linux (e alcuni dei miei codici C) su Android e una delle sfide che mi affronto è che libc di Android disponga di alcuni componenti mancanti / spogliati e finisco per patchare il codice per farlo funzionare Libc di Android (per ad esempio un problema come questo http://credentiality2.blogspot.com/2010/08/compile-ncurses-for-android.html )

Q1: Come faccio a collegarmi staticamente con Glibc (e altre dependencies) mentre compongo il cross-compilazione con il toolchain a arm (o ndk-build)?

  • Qual è il modo migliore per call StartPreview () dopo l'acquisizione di un'image?
  • Come controllare la determinata data tra la data?
  • Android HttpClient non utilizza le impostazioni del proxy del sistema
  • Come fare 3 controllo textView per essere sulla stessa dimensione
  • Ottenere Udid in android
  • Implementazione Bonjour su Android
  • Q2: È una buona idea colbind staticamente gli glibc ai binari per Android? Devo aspettarmi che qualcosa rompa se avvio un collegamento statico? Ci sono problemi di performance / memory?

    Capisco la maggior parte dei pro e contro dei collegamenti statici e dinamici da qui – applicazione C ++ – devo utilizzare il collegamento statico o dinamico per le librerie? e collegamento statico vs collegamento dinamico

    Quindi vorrei sapere se dovrei colbind staticamente glibc per Android quando compilano i binari.

  • Perché HttpUrlConnection lancia un SSLException durante una connessione dati mobile?
  • Android Overriding onBackPressed ()
  • Come get il chilometro di distanza in android?
  • Come posso accedere a un Android disegnabile da una variabile?
  • OnCreateOptionsMenu non viene mai chiamato
  • Perché ottengo NullPointerException quando invio un SMS su un HTC Desire, o cosa è SubmitPdu?
  • 2 Solutions collect form web for “Collegamento statico di Android o collegamento dinamico con glibc”

    Prima una piccola nota sulla libc. L'Android libc è il libic Bionic ( https://github.com/android/platform_bionic/ ) piuttosto che il GNU libc (glibc). Quindi l'libc contenuto nel NDK è Bionic, così come è disponibile libc su dispositivi android.

    Per quanto riguarda glibc, è ansible costruirlo con l'NDK. Tuttavia, il suo nome si scontra con il sistema libc quando viene installato su dispositivi android. Si noti che questo è solo se si va a build una libreria dynamic. Se si crea GNU libc come una libreria statica, l'integer problema sopra viene ignorato, poiché non è necessario installare una libreria statica.

    Ora rispondere alle tue domande:

    1. Q1: Se stai costruendo l'glibc utilizzando l'NDK, l'Android.mk utilizza la variabile BUILD_STATIC_LIBRARY per creare librerie statiche. Tuttavia, se non usi l'NDK, probabilmente dovrai entrare in un sacco di mal di testa (non sa quanto). Non posso dirti di più su questo perché non ho provato una build di glibc, sia statica che dynamic. Inoltre, sembra che la connessione statica con glibc sia altamente scoraggiata, alless per le piattaforms non mobili.

    2. Da un punto di vista di rottura, non esiste alcuna differenza tra il collegamento statico e dinamico. Da un punto di vista di avvio, un eseguibile statico si avvia più velocemente poiché non è necessario eseguire la fase di caricamento delle librerie dinamiche. Non esiste alcuna memory della memory o della velocità di esecuzione in eseguibili statici o dinamici collegati. Il requisito di memorizzazione del disco è più grande per gli eseguibili statici.

    Per quanto riguarda i problemi con la funzionalità mancante libica bionica, è ansible utilizzare il metodo utilizzato dalla maggior parte del software GNU, ovvero fornire la propria implementazione di una function nel caso in cui manchi dalle librerie di sistema. Ho compilato file-5.11, GNU fare 3.82, diffutils-2.8 per Android che passa i toolchains / include / libs di NDK a autotools (./configure …). Sembra che questi programmi contengano implementazioni della maggior parte della function libreria non core, nel caso in cui le librerie standard non le forniscano (in questo caso Bionic).

    Nota: cercherò di creare un glibc statico e aggiornare la risposta come e quando riesco / non riesco.

    Se si intende utilizzare glibc anziché bionico, potrebbe essere utile esaminare l'utilizzo del toolchain di un distro arm-linux (generazione compatibile di kernel) piuttosto che il ndk. Ciò sarebbe particolarmente vero se si stava generando una linea di command eseguibile. (La gente ha spinto sperimentalmente ambienti debian chroot su dispositivi android fino al G1)

    Per un sub jni (che rimane l'unico veicolo ufficialmente riconosciuto per il codice di applicazione nativo) potrebbe essere un po 'interessante "con uno strumento, poiché si esegue in un process che ha già mappato e sta facendo uso continuo della libica bionica per sostenere il Dalvik VM. Presumibilmente, se collegate staticamente le dependencies della biblioteca non verrai in conflitto di nomi, ma mi aspetto da qualunque path che scegli questa sarà un'esperienza di apprendimento riguardo al funzionamento interno – non che è necessariamente una cosa negativa.

    Dovete avere ncurses? Ho costruito correttamente maledizioni per android con il ndk una volta. Considerate anche se il programma sta sfruttando seriamente (cioè, effettua effettivamente una formattazione sostanziale del text?) O semplicemente usando per qualche cosa, perché si supponeva che fosse disponibile sui sisthemes di destinazione?

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.