尝试创建dll。
因此,首先我创建了一个.java文件,如下所示:
class Main
{
static
{
System.loadLibrary("sample_dll");
}
static native void sritest();
public static void main(String [] a)
{
sritest();
}
}
然后,我将其编译为.class。
然后使用javah我创建了main.h。
然后我在C 中编写以下代码。
#include <jni.h>
#include <Main.h>
JNIEXPORT void JNICALL Java_Main_sritest(JNIEnv *env,jobject obj)
{
printf("hi");
}
然后,我使用以下代码使用mingw编译了此版本
g++ -c sample_dll.cpp
g++ -shared -o sample_dll.dll sample_dll.o
然后我将其放在Java库路径中。
然后我运行main.java,但是发生以下例外
链接不满意的链接错误;sritest((v
我找到答案。我犯了三个错误。使用C 编译时,我们必须在Extern" C" {}块中声明我的JNI功能。第二,在MINGW编译器中编译时,我们应该使用以下代码,并将实施包括JDK的文件夹。该代码现在可以使用,我的程序在JNI中毫无问题地运行。用于编译.o到.dll代码的命令行代码是在创建sample_dll.o之后我们必须执行
g++ -Wall -D_JNI_IMPLEMENTATION -Wl,--kill-at -Ic:/path_of_include_folder_in_jdk_without_drive_letter -Ic:/path_of_win32_folder_in_include_folder_in_jdk_without_drive_letter -shared -o sample_dll.dll sample_dll.o
最后一个错误是我要包含Main.h由Javah utlity编写的,该h由我的Java代码创建。这是由
完成的Javac Main.java
Javah Main
然后将Header File Main.H拿出来,然后将其放在C 编译器的Inclupher文件夹中。在我的计算机C中: mingw include。在C 代码中添加其他预处理器
#include<Main.h>
所有完成的创建DLL并将其放在默认Java库路径之一中。可以通过在Java中使用以下功能来获取路径
System.out.println (System.getProperty ("java.library.path"));