Appel des fonctions C ++ à partir de Java
Je développe une application Java dans lequel j'ai besoin d'appeler certaines fonctions C++ (à partir de Google Talk bibliothèque libjingle) . L'objectif est de courir tout sur Google App Engine (qui ne prend en charge Python ou Java).
Comment puis-je faire cela?
source d'informationauteur Arturo
Vous devez vous connecter pour publier un commentaire.
Vous devez définir
native
méthodes dans votre code java pour tout ce que vous voulez être implémenté en C++ et d'accéder directement votre code natif. Ensuite, vous exécutezjavah
sur votre code et il va générer du C fichiers d'en-tête pour vous, et vous devez fournir le C++ implémentations.Le natif de méthodes que vous pouvez appeler à partir de votre code Java comme toutes les autres méthodes, et encore, ils auront leur mise en œuvre, écrite en C++ et en parler à tout autre bibliothèque native directement.
Vous devez ensuite définir le java.de la bibliothèque.chemin d'accès à la propriété système comprennent partagé bibliothèques C/C++ que vous avez besoin de: la bibliothèque de google et de votre propre JNI mise en œuvre de la bibliothèque serait nécessaire dans ce cas.
Si la bibliothèque a C liaisons par l'intermédiaire d'un DLL/SO, je préfère la rédaction de l'encapsulation en Java à l'aide de Java Native d'Accès (JNA) plutôt que l'écriture des liaisons en C/C++ à l'aide de la Java Native Interface (JNI). Le premier est plus facile à manipuler que la JNI l'accès à des objets Java est une vraie douleur dans le cou. Cependant, il n'est pas aussi évident pour l'envelopper de classes C++ à l'aide de l'API.
Vous pouvez également regarder dans le Simplifié Wrapper et l'Interface de Générateur (LAMPÉE) pour automatiser une partie de ce processus!
Vous ne pouvez pas exécuter du code natif sur App Engine - seulement JRE code. Si on ne peut éviter de code natif, vous aurez besoin pour exécuter cette partie de votre application sur un autre système, et de l'appeler à partir de votre App Engine application ou utiliser le haut -XMPP APIdans ce cas.