Je dois écrire une bibliothèque de liaison dynamique en C ++ utilisée par Java sur Android. Comme je l'obtiens, cela devrait être la bibliothèque .so, mais je ne sais pas comment faire ça. J'ai essayé Cygwin, mais il se bloque:
$ GCC 1.CPP P>
/USR/LIB/GCC/I686-PC-CYGWIN/4.3.4 /../../../..../ I686-PC-CYGWIN / BIN / LD: impossible de trouver -Luser32 Collect2: LD Retourné 1 statut de sortie p> blockQuote>
xxx pré> Peut-on peut-il m'aider avec ça? p>
PS STRUT> Je ne suis pas bon à * Nix, donc ça devrait être Mieux fait sous Windows P>
UPD: strong> J'ai installé à la fois Android NDK et Cygwin et les a ajoutés à la variable d'environnement de chemin P>
forte >: Merci d'avoir aidé. Le problème était avec Cygwin lui-même. La réinstallation et NDK résolva le problème. P> p>
3 Réponses :
Regardez les échantillons qui viennent avec le NDK. Vous devez utiliser des liaisons JNI pour lui permettre de communiquer avec Java. Sous ces liaisons, vous pouvez faire ce que vous voulez, mais tout ce qui doit être accessible depuis Java doit passer par les liaisons JNI. Tout ce qui n'a pas besoin d'être accessible peut être écrit comme vous le feriez normalement. P>
Et oui c'est parfaitement faisable sous Windows. P>
Vous aurez probablement besoin de NDK Android pour compiler et relier des bibliothèques natales sur Android. Cygwin et Windows doivent fonctionner (Cygwin fournit les outils requis * Nix). p>
Pour moi, il semble que vous ayez compilé la source C ++ pour un environnement hivernel, qui est totalement différent des téléphones Android. Donc, si vous chargez cette bibliothèque sur le téléphone, cela s'écrasera certainement / ne fonctionnera pas du tout. P>
Voici un Article qui pourrait aider . Il couvre la partie Android-NDK / Cygwin et devrait fournir des pointeurs à plus d'informations. P>
soupir em> - une partie de la main du message d'erreur à Google et a été surprise qu'il n'y ait aucun résultat avec l'User32 Lib ... puis j'ai réalisé que la pièce Ceci est la liaison la plus prometteuse: http: // www. cygwin.com/ml/cygwin/2003-01/msg00292.html p>
Ecrivez la configuration Cygwin basiscalais et ajoutez le package contenant l'utilisateur32 Lib. Ensuite, cela devrait fonctionner. P> -Luser32 code > supprimé efficacement tous les
user32 code> liens associés à partir de la liste de résultats;) p>
Eh bien, j'ai utilisé JNI avec C ++ .DLL-S dans Windows avant, mais j'ai des problèmes de faire de même avec un appareil basé sur Android. Le code ici est fourni uniquement pour la clarté, je sais comment écrire des bibliothèques JNI :) Il semble que mon environnement Cygwin ne soit pas configuré correctement conformément à ce message
Pour votre exemple, utilisez g ++ au lieu de GCC, son programme C ++.
Regardez l'échantillon Hello-Jni dans le NDK. Vous devez construire votre bibliothèque partagée à l'aide du NDK et l'importer dans un projet Android Java. Dans le code Java, vous devez déclarer les fonctions natives avec «natif» et ajouter la bibliothèque à l'aide de STATIC; Voir le feuillet ci-dessous. P>
public native String stringFromJNI(); static { System.loadLibrary("hello-jni"); }