尝试创建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
答案 0 :(得分:0)
我找到了答案。我犯了三个错误。使用c ++编译时,我们必须在extern&#34; C&#34; {}块中声明我的jni函数。第二,在minGW编译器中编译时,我们应该使用以下代码并实现jdk的include文件夹。代码现在有效,我的程序运行顺利,没有问题。 用于编译.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
最后一个错误是我想要包含由我的java代码创建的javah utlity编译的Main.h。 这是由
完成的Javac Main.java
Javah Main
然后创建Main.h创建的头文件并将其放在c ++编译器的include文件夹中。那在我的电脑c:\ minGW \ include。 在c ++代码中添加额外的预处理器
#include<Main.h>
全部完成创建dll并将其放在一个默认的java库路径中。可以通过在java
中使用以下函数来获取路径System.out.println (System.getProperty ("java.library.path"));