我是Java JNI的新手。我尝试了一个helloCPP程序,但遇到了问题。这是我的代码:
helloCPP.java;
public class helloCPP {
public native void hellocpp ();
static {
System.loadLibrary("helloCPP");
}
public static void main (String [] args) {
helloCPP hcpp=new helloCPP ();
hcpp.hellocpp ();
System.exit (0);
}
}
然后这是我的hellocpp.cpp,其中我制作了helloCPP.dll;
#include <iostream>
#include "helloCPP.h"
using namespace std ;
JNIEXPORT void JNICALL Java_helloCPP_hellocpp. (JNIEnv *env, jobject obj) {
cout <<"hello java, I'm c++\n";
}
int main (){};
我成功构建了helloCPP.dll。但是当我尝试运行java helloCPP时,我收到此错误:
Exception in thread "main"
java.lang.UnsatisfiedLinkError: helloCPP.hellocpp () V
at helloCPP.hellocpp(Native Method)
at helloCPP.main (helloCPP.java :8)
我正在Windows 8 x86操作系统上执行所有这些操作。 这些是我写的命令:
javac helloCPP.java
javah helloCPP
g++ -c hellocpp.cpp
g++ -o helloCPP.dll hellocpp.cpp
这个产生了错误:
java HelloCPP
提前致谢。
答案 0 :(得分:-1)
最有可能的是,Java运行时无法找到DLL文件。您已使用其他参数运行Java应用程序(假设DLL文件位于当前目录中):
java -Djava.library.path=. HelloCPP
<强>更新强>
EJP有一个好点。我认为你的链接命令不正确。第二个g ++命令应该是这样的:
g++ -o helloCPP.dll -shared hellocpp.o
有两项更改:hellocpp.o
而不是hellocpp.cpp
,更重要的是选项-shared
,表示您要创建共享库而不是可执行文件。
确切的选项取决于您的平台。由于你没有说明,我无法肯定地告诉你。