Использование jvm.h из JNI - PullRequest
1 голос
/ 06 мая 2020

В настоящий момент я использую библиотеки из JAVA_HOME / include в моем приложении JNI. Он состоит из

  • classfile_constants.h
  • jawt.h
  • jdwpTransport.h
  • jni.h
  • jvmti. h
  • jvmticmlr.h
  • windows / jawt_md.h
  • windows / jni_md.h
  • windows / bridge / AccessBridgeCallbacks.h
  • windows / bridge / AccessBridgeCalls. c
  • windows / bridge / AccessBridgeCalls.h
  • windows / bridge / AccessBridgePackages.h

Хотя они предлагают мне много контроля, я действительно хочу иметь возможность вызывать фактические функции C ++, определенные в исходном коде хотспота. Я просмотрел исходный код JDK 8 и обнаружил, что src/share/javavm/export содержит намного больше файлов заголовков, таких как jvm.h с гораздо более мощными функциями.

Я попытался включить их в свой проект, но получил ошибку unresolved external symbol, вероятно, потому, что эти файлы заголовков не содержат фактических определений функций.

Как я могу использовать такие функции в моем Кодовая база JNI? Возможно ли это вообще?

Заранее спасибо!

1 Ответ

2 голосов
/ 06 мая 2020

Функции, объявленные в jvm.h, предназначены только для внутреннего использования JDK. Их нельзя вызывать из пользовательского кода. Они не являются частью какого-либо API publi c и могут быть изменены в любом (даже незначительном) обновлении JDK.

Эти функции можно вызывать либо путем связывания вашего двоичного файла с libjvm, либо с помощью с использованием поиска Dynami c, т.е. dlopen / dlsym, но использование недокументированного API крайне не рекомендуется и делает ваш код JNI не переносимым между разными версиями JDK и / или строит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...