J'ai cherché mais je n'ai pas trouvé de réponse à ce "problème". Fondamentalement, il faut généralement inclure l'en-tête jni.h pour accéder aux fonctions jni, mais l'en-tête contient principalement des prototypes de fonctions et des déclarations struct, donc nous incluons les sources pour résoudre les fonctions ou inclure une bibliothèque statique ou dynamique.) afin que l'éditeur de liens puisse résoudre les déclarations de prototypes de fonctions. J'ai déjà utilisé le NDK Android pour construire une bibliothèque native et tout ce que j'ai fait était d'inclure l'en-tête jni.h pour utiliser les fonctions jni, mais même sur la documentation et les exemples d'Oracle, tout ce qu'ils font est d'inclure l'en-tête jni.h et spécifiez inclure des répertoires au compilateur, alors comment le compilateur trouve-t-il les implémentations?JNI et la bibliothèque à laquelle elle est liée
Répondre
Comment le compilateur trouve-t-il les implémentations?
Le compilateur n'a pas à trouver les implémentations, la machine virtuelle Java vous indique où ils sont dynamiquement:
JNIEnv
est un typedef pour la struct JNIEnv_
. Cette structure contient un const struct JNINativeInterface_*
appelé functions
et de nombreuses méthodes. Si vous jetez un oeil à la JNI documentation vous remarquerez que la plupart des méthodes ont un JNIEnv*
comme premier argument, mais vous les appelez avec env->method(...)
, sans l'argument JNIEnv*
. Les méthodes de la documentation sont les méthodes réelles et les pointeurs sont dans functions
dans JNIEnv_
. Les méthodes dans JNIEnv_
sont des wrappers qui appellent simplement les indicateurs de méthode dans functions
. Chaque fois que la JVM crée un JNIEnv_
et le JNINativeInterface_
correspondant, elle écrit dynamiquement toutes les adresses de méthode.
- 1. Pourquoi la div parent est-elle liée?
- 2. Quelle est la différence entre, Bibliothèque liée statiquement et Bibliothèque dynamiquement liée
- 3. La bibliothèque standard C++ est-elle remplaçable?
- 4. L'annotation PostConstruct de Spring est-elle liée à la session?
- 5. Bibliothèque OpenSearch .net (C#): laquelle?
- 6. Quelle est la boucle d'événements JavaScript et comment est-elle liée à GWT?
- 7. Bibliothèque @angular vs. angular2 - laquelle est la dernière
- 8. L'utilisation de JNI pour charger une autre bibliothèque JNI?
- 9. Liste liée: Cette solution est-elle bonne?
- 10. L'application Facebook SDK et Android Facebook est-elle liée?
- 11. Pourquoi ma feuille n'est-elle pas attachée à la fenêtre pour laquelle elle est exécutée?
- 12. Un simple projet ndk utilisant la bibliothèque Eigen et jni
- 13. Comment déboguer la bibliothèque JNI/C?
- 14. Pourquoi ma requête jQuery Ajax est-elle liée à JSON?
- 15. La bibliothèque JPGraph est-elle morte?
- 16. Compatibilité de la version Java pour la bibliothèque JNI
- 17. La bibliothèque Jpedal est-elle gratuite?
- 18. UNIX: Bibliothèque statique liée à une bibliothèque statique
- 19. Lien vers une bibliothèque statique liée à une bibliothèque statique
- 20. Java JNI: Comment charger la bibliothèque plusieurs fois?
- 21. Conversion de la bibliothèque statique liée en bibliothèque dynamique liée sous Windows
- 22. Déplacement de la caméra dans la direction à laquelle elle est confrontée
- 23. Une DLL peut-elle être liée à une autre DLL avec une bibliothèque d'importation si la première DLL est liée au moment de l'exécution?
- 24. Compilation d'une bibliothèque liée dynamiquement
- 25. Quelle est la bonne façon de lier à une DLL qui a été liée à une bibliothèque statique et d'autres bibliothèques partagées?
- 26. Bibliothèques statiques et JNI
- 27. Bibliothèque JNI/C: octet de passe ptr
- 28. Comment la stratégie d'ordonnancement des processus Linux est-elle liée à la politique d'ordonnancement des threads?
- 29. Comment la génération de PWM est-elle liée à la vitesse du GPIO?
- 30. la bibliothèque liée dynamiquement C de pas trouvée dans exécutable
La documentation se réfère à jvm.lib. – EJP