我试图实现 JNI。
首先我创建包含一个本地方法的 Java 类,并使用“javac HelloWorld.java”编译它,然后使用“javah HelloWorld”创建头文件...这是代码
class HelloWorld { private native void print(); public static void main(String[] args) { new HelloWorld().print(); } static { System.loadLibrary("HelloWorld"); } }
HelloWorld.h文件如下图......
/* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for class HelloWorld */ #ifndef _Included_HelloWorld #define _Included_HelloWorld #ifdef __cplusplus extern "C" { #endif /* * Class: HelloWorld * Method: print * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_print (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif
在此之后我创建了 HelloWorld.c 文件...这是代码
#include #include #include "HelloWorld.h" JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj) { printf("Hello World!\n"); return; }
然后在 Visual Studio 2008 中使用下面提到的命令编译我的 HelloWorld.c 文件
cl -Ic:\java\jdk\include -Ic:\java\jdk\include\win32 -MD -LD HelloWorld.c -FeHelloWorld.dll
它编译得很好,dll 和其他文件在“HelloWorld.class”文件所在的同一个 bin 文件夹中创建。 但是在使用“java HelloWorld”命令运行 java 文件时出现 msvcr90.dll 文件丢失错误.... 我试图重新安装我的 JDK 但仍然是同样的问题
我该怎么办...
最佳答案
此错误与 Visual Studio 中的build设置有关。您可以选择 CRT 库的静态链接(使用/MT 选项代替/MD)或将 msvcr90.dll 复制到包含您的 HelloWorld.dll 的目录或 %PATH% 中的其他目录。
关于java - 创建 Java native 接口(interface)的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5168350/