繁体   English   中英

Java C ++ JNI不满意的链接错误

[英]java c++ jni unsatisfied link error

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

提前致谢。

Java运行时很可能找不到DLL文件。 您已经使用其他参数运行了Java应用程序(假设DLL文件在当前目录中):

java -Djava.library.path=. HelloCPP

更新:

EJP有一个很好的观点。 我认为您的链接命令不正确。 第二个g ++命令应类似于:

g++ -o helloCPP.dll -shared hellocpp.o

有两个变化: hellocpp.o代替hellocpp.cpp ,更重要的选项-shared ,表示要创建一个共享库,而不是可执行文件。

确切的选项取决于您的平台。 您尚未指定,所以我无法确定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM