Ubuntu 18.04 编译报错: Could NOT find JNI

在Ubuntu 18.04上进行编译时,遇到 Could NOT find JNI错误,通常是由于系统未正确配置Java环境或找不到JNI(Java Native Interface)头文件。本文将详细介绍如何解决这一问题。

一、问题分析

JNI(Java Native Interface)是Java平台的一部分,允许Java代码与其他编程语言编写的代码进行交互。在编译需要JNI的项目时,编译器需要找到JNI头文件和库。如果这些文件不存在或路径不正确,就会出现 Could NOT find JNI的错误。

二、解决方案

1. 安装JDK

首先,确保已安装JDK(Java Development Kit)。建议使用OpenJDK或Oracle JDK。

安装OpenJDK
sudo apt-get update
sudo apt-get install openjdk-8-jdk
安装Oracle JDK

如果您需要使用Oracle JDK,可以通过以下步骤安装:

sudo add-apt-repository ppa:linuxuprising/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

安装完成后,可以设置默认的Java版本:

sudo apt-get install oracle-java8-set-default

2. 设置JAVA_HOME环境变量

配置环境变量 JAVA_HOME,以便编译器可以找到JDK。

查找JDK安装路径
sudo update-alternatives --config java

根据输出,找到JDK安装路径,例如 /usr/lib/jvm/java-8-openjdk-amd64

配置环境变量

编辑环境变量配置文件,例如 /etc/profile~/.bashrc

sudo nano /etc/profile

在文件末尾添加以下内容:

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

保存并关闭文件,然后执行以下命令使配置生效:

source /etc/profile

3. 验证配置

确保环境变量配置正确,并检查Java版本:

echo $JAVA_HOME
java -version

输出应显示JDK路径和Java版本。

4. 配置CMake或其他编译工具

如果使用CMake进行编译,需要确保CMake能够找到JNI。

设置CMake选项

在CMakeLists.txt中添加以下内容,以指定JNI路径:

find_package(JNI REQUIRED)
include_directories(${JNI_INCLUDE_DIRS})

如果CMake仍然找不到JNI,可以手动指定JNI路径:

cmake -DJAVA_AWT_LIBRARY=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/libawt.so \
      -DJAVA_JVM_LIBRARY=/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/server/libjvm.so \
      -DJAVA_INCLUDE_PATH=/usr/lib/jvm/java-8-openjdk-amd64/include \
      -DJAVA_INCLUDE_PATH2=/usr/lib/jvm/java-8-openjdk-amd64/include/linux \
      -DJAVA_AWT_INCLUDE_PATH=/usr/lib/jvm/java-8-openjdk-amd64/include .

三、总结

通过安装正确的JDK、配置环境变量以及正确设置CMake选项,可以解决Ubuntu 18.04编译时出现的 Could NOT find JNI错误。确保所有路径和变量配置正确,编译器才能找到所需的JNI头文件和库。

思维导图

- Ubuntu 18.04 编译报错: Could NOT find JNI
  - 问题分析
    - JNI介绍
    - 错误原因
  - 解决方案
    - 安装JDK
      - 安装OpenJDK
      - 安装Oracle JDK
    - 设置JAVA_HOME环境变量
      - 查找JDK安装路径
      - 配置环境变量
      - 使配置生效
    - 验证配置
    - 配置CMake或其他编译工具
      - 设置CMake选项
      - 手动指定JNI路径
  - 总结

通过本文的详细步骤,您可以在Ubuntu 18.04系统中成功解决编译过程中出现的 Could NOT find JNI错误,确保编译环境的正确配置。