当我试图加载库时,我得到了一个异常: UnsatisfiedLinkError。我已经将库文件放置在正确的路径中,并将该路径添加到path环境变量中。但似乎什么都没起作用。直到我更改了Tomcat的配置并将-Djava.library.path=C:\Windows\System32添加到java选项中。我的一位同事不必这样做,但它在她的系统上运行良好,我遗漏了什么?有人能解释一下这个pleasE吗?
发布于 2012-06-28 20:04:46
一种选择是注册dll
Regsvr32 “path to your dll.dll”.这将安装/注册dll (我假设它是一个dll)
但我通常观察到,如果它是COM,那么您必须注册它并将其放入System32。
发布于 2013-11-27 00:07:29
在JNI中,Java原生方法的名称与对应的C函数的名称不同。为了调用C函数,C函数的名称必须包含前缀"Java_“、类名和方法名。最简单的方法是使用程序"javah“来生成一个包含所有定义的头文件。
尝试下面的Windows示例:(请记住,Java类名必须与相应的文件名相同)
步骤1.创建以下Java文件(P.java):
class P
{
static
{
// "P" is the name of DLL without ".dll"
System.loadLibrary ("P");
}
public static native void f(int i);
public static void main(String[] args)
{
f(1);
}
}步骤2. javac P.java
步骤3. javah P
然后,"javah“生成头文件"P.h”
步骤4.创建包含以下两行的"P.def“文件(该文件定义了导出的符号,在本例中是C函数的名称):
EXPORTS
Java_P_f步骤5.创建C文件(P.c):
#include "p.h"
JNIEXPORT void JNICALL Java_P_f(JNIEnv *env, jclass c, jint i)
{
printf("%i\n",i);
}步骤6.在Visual Studio命令提示符中,定义以下变量:
设置JAVA_HOME= JDK的路径
设置include=%include%;%JAVA_HOME%\include;%JAVA_HOME%\include\win32
步骤7.生成DLL:
cl /LD P.c P.def
步骤8.运行Java程序:
java P
(注意: P.dll和P.class位于同一目录中)
https://stackoverflow.com/questions/11242282
复制相似问题