Windows 下构建 liboqs-java,实现 PQC 算法的调用
环境与工具
Windows 10 / Windows 11 + MinGW-w64 + CMake + JDK + Maven1. 先理解 liboqs 和 liboqs-java 的关系
在开始构建之前,先简单理一下几个组件之间的关系。
Spring Boot / Java 业务代码 | | 调用 Java API v liboqs-java.jar | | JNI 调用 v oqs-jni.dll | | 链接 v liboqs.a / liboqs | | 实际执行算法 v ML-KEM、ML-DSA 等 PQC 算法可以这样理解:
| 组件 | 作用 |
|---|---|
liboqs | C 语言实现的后量子密码学算法库 |
liboqs-java | 对liboqs的 Java 封装 |
oqs-jni.dll | Java 和 native 层之间的 JNI 桥接库 |
liboqs-java.jar | Java 项目最终要引入的 JAR 包 |
所以构建顺序一定是:
- 先构建
liboqs - 再构建
liboqs-java - 最后在 Java / Spring Boot 项目中引用生成的 JAR
如果跳过第一步,直接构建liboqs-java,通常会遇到找不到oqs.h、找不到liboqs.a之类的问题。
2. 构建时候的项目目录结构
因为需要在github上获取liboqs与libqos-java两个项目源码,构建时候建议最终的目录结构如下:
D:\workspace\liboqs-java-main ├── pom.xml ├── README.md ├── examples │ ├── KEMExample.java │ ├── SigExample.java │ └── RandExample.java ├── src ├── liboqs │ ├── CMakeLists.txt │ ├── src │ └── build │ ├── include │ │ └── oqs │ │ └── oqs.h │ └── lib │ └── liboqs.a └── target └── liboqs-java.jar其中比较关键的是这几个文件:
liboqs\build\include\oqs\oqs.h liboqs\build\lib\liboqs.a target\liboqs-java.jar只要这几个文件都生成了,说明主流程基本走通了。
3. 准备构建工具
需要提前安装下面几个工具。
| 工具 | 用途 |
|---|---|
| MinGW-w64 | 提供gcc、g++,用于编译 C 代码和 JNI 代码 |
| CMake | 生成并驱动liboqs的构建 |
| JDK | 编译 Java 代码,同时提供 JNI 头文件 |
| Maven | 构建liboqs-java并打包 JAR |
| Git | 拉取源码,非必需,也可以手动下载 ZIP |
建议所有工具都安装在英文路径下,不要放在带中文或空格的目录里。例如:
D:\c_tools\mingw64 D:\java\jdk-21 D:\javaTools\apache-maven-3.9.x D:\workspace这是因为 native 构建工具对路径比较敏感,中文路径或空格路径有时会带来一些很难排查的问题。
4. 安装 MinGW-w64
可以使用 WinLibs 提供的 MinGW-w64 发行版。
下载地址:
https://winlibs.com/选择 Windows x86_64 版本即可。下载后解压到类似下面的目录:
D:\c_tools\mingw64确认下面几个文件存在:
D:\c_tools\mingw64\bin\gcc.exe D:\c_tools\mingw64\bin\g++.exe D:\c_tools\mingw64\bin\mingw32-make.exe后面 CMake 会通过这些工具来编译liboqs和 JNI 代码。
5. 安装 CMake
可以使用 winget 安装:
winget install Kitware.CMake也可以从官网下载 Windows x64 Installer:
https://cmake.org/download/安装时建议勾选:
Add CMake to the system PATH安装完成后,重新打开一个 PowerShell,执行:
cmake --version能看到版本号就说明 CMake 已经可以正常使用。
6. 安装 JDK
JDK 可以使用 Eclipse Temurin 或 Oracle JDK。
下载地址:
https://adoptium.net/ https://www.oracle.com/java/technologies/downloads/本文示例使用 JDK 21,安装路径假设为:
D:\java\jdk-21需要确认以下文件存在:
D:\java\jdk-21\bin\java.exe D:\java\jdk-21\bin\javac.exe D:\java\jdk-21\include\jni.h其中jni.h很重要。构建liboqs-java时会编译 JNI 代码,如果安装的是 JRE 而不是 JDK,就会缺少这个头文件。
7. 安装 Maven
从 Maven 官网下载 binary zip 包:
https://maven.apache.org/download.cgi解压到:
D:\javaTools\apache-maven-3.9.x确认下面文件存在:
D:\javaTools\apache-maven-3.9.x\bin\mvn.cmd8. 配置环境变量
这是 Windows 下最容易出问题的一步。
建议配置以下用户变量:
| 变量名 | 示例值 |
|---|---|
JAVA_HOME | D:\java\jdk-21 |
MAVEN_HOME | D:\javaTools\apache-maven-3.9.x |
MinGW_HOME | D:\c_tools\mingw64 |
然后把下面几个目录加入Path:
