java c ++ jni不满意的链接错误

时间:2013-06-20 06:20:23

标签: java c++ java-native-interface

我是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 

提前致谢。

1 个答案:

答案 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,表示您要创建共享库而不是可执行文件。

确切的选项取决于您的平台。由于你没有说明,我无法肯定地告诉你。