0

我是 Java JNI 的新手。我尝试了一个 helloCPP 程序,但遇到了问题。这是我的代码:

你好CPP.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.dll 的 hellocpp.cpp ;

#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 

提前致谢。

4

1 回答 1

-1

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

java -Djava.library.path=. HelloCPP

更新:

EJP 有一个很好的观点。我认为您的链接命令不正确。第二个 g++ 命令应该是这样的:

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

有两个更改:hellocpp.o而不是hellocpp.cpp更重要的选项-shared表明您要创建共享库而不是可执行文件。

确切的选项取决于您的平台。因为你没有具体说明,所以我不能肯定地告诉你。

于 2013-06-20T06:52:59.577 回答