关于JNI的问题
有个小问题,还望高手指点:
我要在Java中调用一段C代码,三千多行,懒得翻译,决定用JNI实现。却发现Java无法调用由MinGW编译出的dll文件中的函数。开始以为是C接口没弄好,后来才发现最简单的JNI都行不通,情况如下:
环境:WinXP, Sun JDK 1.4.2_03, MinGW v3.1.0
// Test.java
public class Test
{
public native static void show();
static {
System.loadLibrary("dllshow");
}
public static void main(String[] args)
{
System.out.println("Hello World!");
show();
}
}
用javah导出头文件(一字未改),编写dllshow.c。
// dllshow.c
#include <jni.h>
#include "Test.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_Test_show (JNIEnv *env, jclass cls)
{
printf("Hello, dll\n");
return;
}
用MinGW编译成dllshow.dll,编译语句如下:
gcc -shared -o call.dll call.c -I%JAVA_HOME%\include -I%JAVA_HOME%\include\win32
然后运行Test就出事了:
E:\project\java\TestDLL>java Test
Hello World!
Exception in thread "main" java.lang.UnsatisfiedLinkError: show
at Test.show(Native Method)
at Test.main(Test.java:12)
从异常信息来看,并不是找不到动态连接库(dll),至于到底为什么我就搞不懂了。还请各位高手指点。