我想编译并运行一个简单的Hello World程序,该程序从Java声明并调用本机打印方法(用C ++定义)。
HelloCPP.java
class HelloCPP{
private native void print();
public static void main(String [] args){
new HelloCPP().print();
}
static{
System.loadLibrary("HelloCPP");
}
}
HelloCPP.cpp
#include <jni.h>
#include<iostream>
#include "HelloCPP.h"
using namespace std;
extern "C"
JNIEXPORT void JNICALL Java_HelloCPP_print(JNIEnv *env, jobject obj){
cout << "Hello World from C++!" << endl;
return;
}
在命令提示符下,运行以下命令:
然后臭名昭著的DLL链接/加载错误
线程“主”中的异常java.lang.UnsatisfiedLinkError:<“ MyProjectDirectory”> \ HelloCPP.dll:在java.lang的java.lang.ClassLoader $ NativeLibrary.load(本机方法)处找不到依赖库。 java.lang.System.loadLibrary(System上的java.lang.Runtime.loadLibrary0(Runtime.java:870)上的java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)上的ClassLoader.loadLibrary0(ClassLoader.java:1941) .java:1122)。(HelloCPP.java:8)
尝试的解决方案
附加说明
答案 0 :(得分:1)
Java代码: helloworld.java
class helloworld{
public native void hello();
static {
System.loadLibrary("hello");
}
public static void main(String args[]){
new Helloworld().hello();
}
}
cpp代码: 你好。c
#include<iostream>
#include "helloworld.h"
using namespace std;
JNIEXPORT void JNICALL Java_helloworld_hello(JNIEnv *env, jobject obj)
{
cout<<"Hello World";
return;
}
命令
javac -h . helloworld.java
g++ -I /usr/lib/jvm/java-8-oracle/include/ -I /usr/lib/jvm/java-8-oracle/include/linux/ hello.cpp -shared -o libhello.so -fPIC
java -Djava.library.path=. helloworld