如何解决在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(将#修改为@)