在Windows上使用CMAKE链接Java调用API

问题描述

我试图通过使用Java Invocation API启动JVM来熟悉C ++ / CMake并在Windows上进行链接。不幸的是,我在理解链接在Windows上的工作方式时遇到了一些问题。我正在使用已安装Visual Studio 2019的CLion。

我在C:/dev/Java/jdk-13.0.2指向的JAVA_HOME上安装了OpenJDK 13。

我的CMakeLists.txt是:

cmake_minimum_required(VERSION 3.16)
project(cppjni)

set(CMAKE_CXX_STANDARD 17)

find_package(JNI REQUIRED)

message("jni libraries ${JNI_LIBRARIES}")
add_executable(cppjni main.cpp MyJvm.cpp MyJvm.h)
target_include_directories(cppjni PUBLIC ${JNI_INCLUDE_DIRS})
target_link_libraries(cppjni ${JNI_LIBRARIES})

MyJVM类只是JNI接口周围的简单包装,如本教程的https://docs.oracle.com/javase/10/docs/specs/jni/invocation.html中所述。

不幸的是,每当我在Clion中启动此操作时,我都会得到一个

C:\dev\Workspace\cppjni\cmake-build-debug\cppjni.exe

Process finished with exit code -1073741515 (0xC0000135)

认为这是因为链接无法正常进行。如果我将工作目录设置为 C:\dev\Java\jdk-13.0.2\bin\server,应用程序启动。

如果我在Powershell中手动运行cmake,则FindJNI脚本将输出以下内容:

-- Found JNI: C:/dev/Java/jdk-13.0.2/lib/jawt.lib
jni libraries C:/dev/Java/jdk-13.0.2/lib/jawt.lib;C:/dev/Java/jdk-13.0.2/lib/jvm.lib

据我了解,这些是JVM的静态库。然后应该将它们包含在最终的二进制文件中,对吗?还是我每次运行jvm.dll时都必须将其与应用程序一起运送?

此外,jvm.dll的大小约为12 mb,但jvm.lib仅为977 kb。这不能是相同的JVM,对吗?但是,为什么FindJNI找不到jvm.dll?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...