JNI提示找不到依赖的库文件,java.lang.UnsatisfiedLinkError。

BenjaminMa 发布于 2011/10/11 12:20
阅读 17K+
收藏 0
E:\MySource\app_test\NativeTest>java HelloNativeTest
Exception in thread "main" java.lang.UnsatisfiedLinkError: E:\MySource\app_test\NativeTest\HelloNative.dll: Can't find d
ependent libraries
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at HelloNativeTest.<clinit>(HelloNativeTest.java:4)
Could not find the main class: HelloNativeTest.  Program will exit.
运行JNI测试程序,提示如上。 下面是程序,按照Java核心技术第八版上的实例程序来的:
class HelloNative
{
	public static native void greeting();
}
javac HelloNative.java
javah HelloNative
生成如下C的头文件:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */

#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloNative
 * Method:    greeting
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloNative_greeting
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

编写C文件:
#include "HelloNative.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloNative_greeting(JNIEnv* env, jclass cl)
{
	printf("Hello Native World\n");
	}

在Windows7 64位平台上使用MinGW编译该程序生成dll文件,命令如下:
gcc -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at  -I%JAVA_HOME%/include -I%JAVA_HOME%/include/win32
  -shared HelloNative.c -o HelloNative.dll

在当前目录下生成了HelloNative.dll文件,编写测试main方法:
class HelloNativeTest{
	
	static{
			System.loadLibrary("HelloNative");
		}
	
		public static void main(String args[]){
				HelloNative.greeting();
			}
	}

运行之后就出现了上面的异常,我试过将dll文件路径放入PATH中,试过将dll文件放入System32中,均出现此异常。 

请熟悉该问题的朋友,帮忙看下哪里有问题,3Q。

加载中
0
BenjaminMa
BenjaminMa
Google过一些,里面提到了是因为与Windows编译器产生的dll的函数名不相同的问题,但我没环境打开这个,不知道dll是否是需要用vs或者VC来打开呢?
0
红薯
红薯

居然是用gcc来编译的,这样你的dll可能还要依赖mingw的一些库,需要把所依赖的库也拷贝到system32目录。

建议 Windows 下还是用 Visual Studio 来编译吧

0
BenjaminMa
BenjaminMa

先谢过了。

 Visual Studio好大的说,我还是先尝试一下把依赖库也拷贝到system32.

0
J
JennyQI241
你好,我也碰到了这个问题,我也是用mingw编译的,也出现找不到库的问题,你是怎么搞定的,请指教,先谢谢了
0
Le_Guto
Le_Guto
要把dll的目录设置给本机库位置
返回顶部
顶部