【发布时间】:2026-01-10 13:10:01
【问题描述】:
我正在尝试使用 c++ 代码运行 java 程序。我试过下面的代码
#include<jni.h>
#include<stdio.h>
int main(int argc, char** argv) {
JavaVM* vm;
JNIEnv* env;
JavaVMInitArgs vm_args;
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 0;
vm_args.ignoreUnrecognized = 1;
// Construct a VM
jint results = JNI_CreateJavaVM(&vm, (void**)& env, &vm_args);
// Construct a String
jstring jstr = env->NewStringUTF("Hello World");
// First get the class that contains the method you need to call
jclass clazz = env->FindClass("java/lang/String");
// Get the method that you want to call
jmethodID to_lower = env->GetMethodID(clazz, "toLowerCase",
"()Ljava/lang/String;");
// Call the method on the object
jobject result = env->CallObjectMethod(jstr, to_lower);
// Get a C-style string
const char* str = env->GetStringUTFChars((jstring)result, NULL);
printf("%s\n", str);
// Clean up
env->ReleaseStringUTFChars(jstr, str);
// Shutdown the VM.
vm->DestroyJavaVM();
}
我使用下面的命令来编译代码
g++ LoadJVM.c -I/c/apps64/Java/jdk-11.0.1/include -I/c/apps64/Java/jdk-11.0.1/include/win32 -L/c/apps64/Java/jdk-11.0.1/lib/ -ljvm
它编译得很好,但是当我像下面这样运行可执行文件时,我遇到了错误
./a.exe
错误
error while loading shared libraries: jvm.dll: cannot open shared object file: No such file or directory
知道为什么这个 jvm.dll 没有被加载吗?
PS:我正在 Windows 10 上从 Git-Bash 编译和运行。
【问题讨论】:
-
没有这样的文件或目录的哪一部分不清楚?它找不到加载它的DLL。
-
“jvm.dll:无法打开共享对象文件”。这里的问题是如何加载这个dll?
-
代码已经尝试打开它,但是找不到。再次阅读消息 - 没有这样的文件或目录。 DLL 需要位于 PATH 或应用程序的目录中。
-
jvm.dll 存在于 $JAVA_HOME/bin/server/ 中。我尝试使用 export PATH="$PATH:$JAVA_HOME/bin/server/" 添加 PATH 但仍然是同样的问题。程序无法选择 dll
-
@Krishnom 似乎您的问题可能是由您使用的 Windows 和非 Windows 工具的混合造成的。猜测一下,也许您需要将 jvm.dll 位置添加到 Windows PATH 环境变量,而不是 git-bash PATH 环境变量。但实际上只是一个猜测。
标签: c++ windows java-native-interface windows-10 git-bash