Неотъемлемой частью Java Native Interface (JNI) является соединение кода JVM и собственного кода через заголовки C. Раньше способ создания этих файлов заголовков был довольно простым: просто вызывайте утилиту командной строки javah
для файлов классов. Затем этот процесс будет генерировать прототипы для любого метода, отмеченного модификатором native
.
Однако, начиная с Java 10, утилита javah
была удалена и предложена ее замена — это новый флаг «-h» для javac. Замена работает нормально, если доступны исходные файлы Java, однако не работает в случаях, когда доступны только скомпилированные файлы классов. (Проблема, вызвавшая этот вопрос, заключается в том, что я пытаюсь создать привязки JNI из источников Scala. Мой текущий подход состоял в том, чтобы сначала скомпилировать их, а затем запустить javah для полученных файлов классов.)
В ситуации, когда доступны только скомпилированные файлы классов, есть ли способ сгенерировать заголовочные файлы C, подобно тому, как это делал javah
?
javac -h
не вариант? - person Naman   schedule 27.03.2018javap
. Вы можете декомпилировать класс, оставить только нативные вещи и использовать javac для обратной компиляции. Но это довольно некрасивый подход. - person Oo.oO   schedule 27.03.2018