CMake находит неправильную версию Java, а затем требует отсутствующую версию JavahJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 CMake находит неправильную версию Java, а затем требует отсутствующую версию Javah

Сообщение Anonymous »

Я настраиваю проект в системе SLES15, в которой я не являюсь пользователем root. У меня установлен Oracle JDK 17.0.12 в ~/opt/jvm ; JAVA_HOME указывает туда; и $JAVA_HOME/bin находится на пути, так что команда -v java дает /home/einpoklum/opt/jvm/bin/java.
Теперь я знаю, что начиная с Java 10 или около того исполняемый файл javah был удален. Итак, когда CMake ищет Java, он не должен меня подвести из-за того, что я его не нашел. Однако когда я это делаю:

Код: Выделить всё

find_package(Java REQUIRED)
Я понимаю:

Код: Выделить всё

CMake Error at /home/einpoklum/opt/versions/cmake/3.31.6/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake:233 (message):
Could NOT find Java (missing: Java_JAVAH_EXECUTABLE) (found version
"1.8.0.141")
Call Stack (most recent call first):
/home/einpoklum/opt/versions/cmake/3.31.6/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake:603 (_FPHSA_FAILURE_MESSAGE)
/home/einpoklum/opt/versions/cmake/3.31.6/share/cmake-3.31/Modules/FindJava.cmake:326 (find_package_handle_standard_args)
-- snip --

Could NOT find Java (missing: Java_JAVAH_EXECUTABLE) (found version
"1.8.0.141")
Каким-то образом CMake находит другую версию Java. Хорошо, я запустил его с --debug-find-pkg=Java. Вот (как я думаю) соответствующая часть вывода:

Код: Выделить всё

  find_program called with the following settings:

VAR: Java_JAVA_EXECUTABLE
NAMES: "java"
Documentation: Path to a program.
Framework
Only Search Frameworks: 0
Search Frameworks Last: 0
Search Frameworks First: 0
AppBundle
Only Search AppBundle: 0
Search AppBundle Last: 0
Search AppBundle First: 0
CMAKE_FIND_USE_CMAKE_PATH: 1
CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: 1
CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: 1
CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: 1
CMAKE_FIND_USE_INSTALL_PREFIX: 1

find_program considered the following locations:

/home/einpoklum/opt/yaml-cpp/bin/java
/home/einpoklum/opt/yaml-cpp/sbin/java
/home/einpoklum/opt/yaml-cpp/java
/home/einpoklum/opt/bin/java
/home/einpoklum/opt/sbin/java
/home/einpoklum/opt/java

The item was found at

/usr/java/latest/bin/java
и действительно, этот исполняемый файл имеет версию 1.8.0.141. Но почему CMake игнорирует мой параметр JAVA_HOME? И что я могу сделать, чтобы гарантировать, что он найдет нужные исполняемые файлы, кроме установки этих переменных вручную?

Подробнее здесь: https://stackoverflow.com/questions/798 ... sing-javah
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»