我正在尝试将JNI与C++结合使用。我能够创建一个Hello World JNI项目
this
辅导的
但是,我想用
JSON for modern C++
在我的C++函数中。这个库只包含一个
json.hpp
我在项目中包含的文件。
一切都准备好了我的
hello.dll
但当我运行Java应用程序时,我遇到了以下错误:
$ java HelloJNI java.lang.UnsatisfiedLinkError: C:\Users\Levio-CIL\Desktop\TEST\hello.dll: Can't find dependent libraries
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at HelloJNI.<clinit>(HelloJNI.java:3) Exception in thread "main"
我做了一些测试,看起来。dll内部找不到函数
json。水电站
.当我删除这个函数时,一切都很好。C++程序也可以作为独立程序成功运行。
你好。爪哇:
public class HelloJNI {
static {
System.loadLibrary("hello");
}
private native void sayHello();
public static void main(String[] args) {
new HelloJNI().sayHello(); // invoke the native method
}
}
你好。cpp:
#include <jni.h>
#include "HelloJNI.h"
#include "json.hpp"
using json = nlohmann::json;
// Implementation of native method sayHello() of HelloJNI class
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj) {
json specific_data = json::parse("{\"id\": \"aa\",\"value\": 1,\"type\": \"water\"}"); //THE PROBLEMATIC LINE
printf("Hello world");
return;
}
其他信息:
我正在使用Windows 10和cygwin64。
我使用以下命令编译我的c++文件:
x86_64-w64-mingw32-g++ -I"%JAVA_HOME%\include" -I"%JAVA_HOME%\include\win32" -shared -o hello.dll HelloJNI.cpp json.hpp
每个文件都在同一个目录中。
编辑:
我包括了Dependency Walker提供的缺少的库,但仍然得到了相同的错误。(是的,我在workdir中运行.dll)