问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Java异常:no w3jfwx_jni in java.library.path

发布网友 发布时间:2022-04-23 18:28

我来回答

3个回答

热心网友 时间:2023-10-12 23:12

你可以看一下这个http://blog.csdn.net/niuxinlong/article/details/4176612
或许对你有帮助

运行JSP报表程序页面出现java.lang.UnsatisfiedLinkError: CC错误有以下几种原因和处理方法:

1、请查看控制台的错误信息
a:如果控制台的消息是类似

java.lang.UnsatisfiedLinkError: no MRChkLib in java.library.path,Error loading library MRChkLib

这样的错误信息,那么是因为MRChkLib.dll没有拷贝到windows的System32目录下.
(MRChkLib.dll是加密锁的JAVA接口文件,文件在报表安装目录DogDriver/JavaAPI下可以找到)
并且要注意PATH环境变量中要包含System32目录。(如果服务器操作系统是Linux,那么使用报表安装目录DogDriver/JavaAPI
下的libMRChkLib.so文件,将libMRChkLib.so复制到WebServer的启动bin目录。如果在这个目录下仍然出现can
not load library错误,请设置系统环境变量LD_LIBRARY_PATH的值为libMRChkLib.so所在的目录。
例如:如果libMRChkLib.so在/somedir目录下,则 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/somedir)

b:如果控制台的消息是类似

java.lang.unsatisfiedLinkError
:native libery c:/winnt/system32/mrchklib.dll already loaded in another
classLoader error loading mrchklib.dll

这样的错误信息,那么是因为WebAPP在重新被启动之后,无法再次加载动态库造成的,这是java的约束,Java不允许一个实例加载多次动态
库.可以这样解决,将mr.jar拷贝到WebServer的lib目录,删除/WEB-INF/lib目录下的mr.jar,然后重新启动
webserver。

2、如果一个webserver上有多个报表应用,请将/WEB-INF/lib/mr.jar移动到WebServer的lib目录下,确保每一个Web应用程序目录下都没有mr.jar,而只有WebServer的lib目录下有该文件,重启webserver.

3、一个Webserver上只能有一个mr.jar文件,删掉多余的mr*.jar文件,然后清除webserver临时文件,重新启动webserver。

===================================================================================

最近项目中用到了jni,于是安装了eclipse的cdt和MinGW来用,以前没怎么动过C语言,网上找了下教程,倒是挺容易的,一路弄下
来也没提示什么错误,但是在最后调用本地方法时却遇到了大麻烦,总是提示找不到方法。即使一个简单的HelloWorld,也是一样
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloWorld.print()V
奇怪了,loadLibrary()没有问题,怎么会找不到方法呢?用dll export viewer察看,导出的方法为
函数名 地址 偏移量
Java_HelloWorld_print@8 0x67741250 0x00001250

实在没办法了,只好安装庞大的visual studio重新来编译,调用成功了!
再次用dll export viewer查看,发现函数名的前面多了一条下划线
函数名 地址 偏移量
_Java_HelloWorld_print@8 0x67741250 0x00001250
看来是给MinGW少传了某个参数,经过网上查阅资料,终于找到一个解决方案:给MinGW的ld命令指定一个参数--kill-at即可
gcc -Wl, --kill-at -shared -o jnihello.dll HelloWorld.c
再次用dll export viewer查看,发现导出的函数名称变为
函数名 地址 偏移量
Java_HelloWorld_print 0x67741250 0x00001250

--kill-at指令去掉了函数名称后缀的@,并没有像msvc那样添加前缀的下划线

========================================================================

现象: java.lang.UnsatisfiedLinkError: Native Library xxx.dll already
loaded in another classloader at
java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1551) at
java.lang.ClassLoader.loadLibrary(ClassLoader.java:1511) at
java.lang.Runtime.loadLibrary0(Runtime.java:788) at
java.lang.System.loadLibrary(System.java:834) 分析:
这种错误在我们使用热启动方式发布某个使用了JNI技术的Web应用时,并将调用年native方法的jar包独立部署在该应用下面,当我们的Web应用
有了更新以后,在调用到该jar包封装的native方法时,会抛出该错误。(以上OS为Windows,若是Linux或Unix,应该是xxx.so
报错) 这是因为Web服务器已经在第一次加载该应用时,已经load了该dll,当该应用被再次热启动时,该dll将重新被加载,于是报错。
解决方案: 一、将含有JNI调用的jar包部署在Web服务器的公用lib库中。Web应用再发布时可以不用加载;
二、jar包部署不变,在该Web中实现一个listener,监听是否第一次启动,若不是第一次启动,屏蔽掉该jar包所含dll的加载。

========================================================================

类装入问题:UnsatisfiedLinkError

作者:Simon Burns 来源:IBM 整理日期:2007-6-3

UnsatisfiedLinkError

在把本机调用链接到对应的本机定义时,类装入器扮演着重要角色。如果程序试图装入一个不存在或者放错的本机库时,在链接阶段的解析过程会发生 UnsatisfiedLinkError。JVM 规范指定 UnsatisfiedLinkError 是:

对于声明为 native 的方法,如果 Java 虚拟机找不到和它对应的本机语言定义,就会抛出该异常。

当调用本机方法时,类装入器会尝试装入定义了该方法的本机库。如果找不到这个库,就会抛出这个错误。

清单 6 演示了抛出 UnsatisfiedLinkError 的测试用例 :

清单 6. UnsatisfiedLinkError.java

public class UnsatisfiedLinkErrorTest {
public native void call_A_Native_Method();
static {
System.loadLibrary("myNativeLibrary");
}
public static void main(String[] args) {
new UnsatisfiedLinkErrorTest().call_A_Native_Method();
}
}

这段代码调用本机方法 call_A_Native_Method(),该方法是在本机库 myNativeLibrary 中定义的。因为这个库不存在,所以在程序运行时会发生以下错误:

The java class could not be loaded. java.lang.UnsatisfiedLinkError:
Cant find library myNativeLibrary (myNativeLibrary.dll)
in sun.boot.library.path or java.library.path
sun.boot.library.path=D:/sdk/jre/bin
java.library.path= D:/sdk/jre/bin
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:2147)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:2006)
at java.lang.Runtime.loadLibrary0(Runtime.java:824)
at java.lang.System.loadLibrary(System.java:908)
at UnsatisfiedLinkErrorTest.<clinit>(UnsatisfiedLinkErrorTest.java:6)

本机库的装入由调用 System.loadLibrary() 方法的类的类装入器启动 —— 在清单 6 中,就是 UnsatisfiedLinkErrorTest 的类装入器。根据使用的类装入器,会搜索不同的位置:

对于由 bootstrap 类装入器装入的类,搜索 sun.boot.library.path。

对于由扩展类装入器装入的类,先搜索 java.ext.dirs,然后是 sun.boot.library.path,然后是 java.library.path。

对于由系统类装入器装入的类,搜索 sun.boot.library.path,然后是 java.library.path。

在清单 6 中,UnsatisfiedLinkErrorTest 类是由系统类装入器装入的。要装入所引用的本机库,这个类装入器先查找 sun.boot.library.path,然后查找 java.library.path。因为在两个位置中都没有需要的库,所以类装入器抛出 UnsatisfiedLinkageError。

==========================================================================

java.lang.UnsatisfiedLinkError
出现这种错误的原因是一般是java虚拟机找不到声明为native方法的本地语言定义时,出现的错误。在我的理解过程中我一般都认为是由于导入dll或
者导入lib文件不正确导致的。有些需要静态导入就没有问题(即在前面加static来导入lib文件),如果是不加static导入也就是动态导入的时
候,那么需要添加catch的抛出异常来解决,如

try{
System.loadLibrary("vtkCommonJava");
System.loadLibrary("vtkFilteringJava");
System.loadLibrary("vtkIOJava");
System.loadLibrary("vtkImagingJava");
System.loadLibrary("vtkGraphicsJava");
System.loadLibrary("vtkRenderingJava");
}catch(Throwable e)
{
System.out.println("The load problem");
}

这种方式来判断,或者直接在类前面添加

static{

System.loadLibrary("vtkCommonJava");
System.loadLibrary("vtkFilteringJava");
System.loadLibrary("vtkIOJava");
System.loadLibrary("vtkImagingJava");
System.loadLibrary("vtkGraphicsJava");
System.loadLibrary("vtkRenderingJava");

}

================================================================================

关于java.lang.UnsatisfiedLinkError(JNI)

目标:把pbp1.0的java包和native移到GEM中,并使GEM在新的虚拟机上正常运行
背景:GEM(1)有一堆java包和native函数,pbp1.0是虚拟机和JAVA基本包,要将pbp1.0的虚拟机移走只用它的JAVA基本包和native函数。
问题:在将GEM和pbp1.0的native函数生成一个动态库后在程序里System.loadLibrary()无法加载,报java.lang.UnsatisfiedLinkError
解决过程:
1,理论

我们知道,JAVA调用native函数时,必须通过System.loadLibrary()或System.load将其native函数所在动态库
加载到虚拟机。并在运行时指明-Djava.library.path或-Dsun.boot.library.path,将其指向包含有native函
数的动态库所在位置。
2,实施

我按这个步骤操作完成后就是无法加载我生成的动态库libgem.so,这个库用到的其他动态库包括:rt,pthread,freetype,dl,
directfb,而directfb用到的动态库有rt,dl,pthread,freetype,jpeg,png,这些库除了directfb要生
成外其余都在/lib目录下存在。
3,思路
先写了一个Hello的测试用例。发现在native里所使用到其他动态库时,无论是否存在于相关目录,仍然无法加载。然后经过修改编译选项,把所使用到的动态库连动态连接进目标库,如下:
$(GCC) -fPIC -shared -o libdirectfb.so ... -lpng -ljpeg -lpthread -lrt -ldl, -lfreetype
经过这么一个修改后,directfb可以加载。

这也说明System.loadLibrary()所加载的动态库所引用的所有符号都要能找到。如果有一个无法找到将无法加载。可以写一个空的main
()函数,对你的动态库进行连接,如果动态库里所引用的符号在指定的动态库和本身找到不到则无法编译通过,那么这个动态库也肯定加载不了。
4,问题解决
按照这个思路,对libgem.so的编译Makefile做相应修改后,问题解决!并在LD_LIBRARY_PATH加入动态库所在目录。

(1)
MHP (Multimedia Home Platform) was developed by the DVB Project as the
world's first open standard for interactive television. It is a
Java-based environment which defines a generic interface between
interactive digital applications and the terminals on which those
applications execute. MHP was designed to run on DVB platforms but
there was a demand to extend the interoperability it offers to other
digital television platforms. This demand gave rise to GEM, or Globally Executable MHP, a framework which allows other organisations to define specifications based on MHP.

====================================================================================

另外,还可能是dll本身的问题,使用release版的,而不要用debug版的

=============================================================================

关于编写JNI时的发生的unsatisfiedlinkError错误- -

这个错误也让我郁闷了半天,现在我把它写出来,可以让大家少走点弯路。一般这个错误有两种:

1。unsatisfiedlinkError:dll名,那说明你没有把dll放到合适的位置,一般就和要调用原生函数的类放在一起,当然前提是你成功的生成dll了

2。unsatisfiedlinkError:方法名,这个时
候你其实dll已经成功生成了,而且位置也正确,它的意思就是你没有定义那个函数,你可能会说,我明明定义了,其实当你发现问题所在,你只能自虐了,肯定
是你在C文件中定义函数时有些字母大小写错了,因为其他地方是自动生成的,不会出错。尤其是直接从网上拷贝源程序时经常发生这种问题,有些作者不负责任,
把有错误的程序也贴上去。

热心网友 时间:2023-10-12 23:13

可能使用了第三方jar包,所以在运行库中要添加一个这个jar包,有什么问题,请私我:淮师----晓设计师(新浪微博)

热心网友 时间:2023-10-12 23:13

少jar包,你要过来导进去就好了。追问不是应该是.dll之类的文件吗,我在整个项目中没找到w3jfwx_jni开头的文件,为什么

追答它应该是封装在jar包里的,你从谁那儿接的,给他看这个错,叫他把包传给你,导进项目

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
家政服务阿姨是做什么的? 中央空调水滴图标是什么模式? 和EXO有关(字)的头像3张, 真的没人要么 exo这几个字母头像组合的头像 有没有EX0成员穿有EXO字的衣服的图片,和我头像一样的,越多越好! 为什么工商办卡要证明 亲子阅读的优缺点是什么? 馒头冬天放在室外存放 宝宝2 岁半说话结巴,宝宝结巴怎么纠正? 宝宝讲话口齿不清怎么办 Eclipse从debug状态进入普通状态 java中常见的几种异常 java的各种异常 如何解决java.lang.NoClassDefFoundError javax.servlet.ServletException: java.lang.LinkageError: loader constraint vi Servlet.service() for servlet jsp threw exception java.lang.LinkageError: lo tomcat6 出现 java.lang.LinkageError: Class javax&#47;servlet&#47;ServletRequestEvent violates loader错误 Java 调用webServices接口传入参数,报错了! java.lang.LinkageError: loader constraint violation weblogic 启服务时: java.lang.LinkageError JAVA报错:java.lang.LinkageError 【java】java.lang.LinkageError 汉字是什么文字 1.什么是不规范字? 汉字共有多少个? 日本人取名中非常用汉字表里的文字要怎么办?直接拿片假写嘛?最好给举个带非常用汉字的名字例子 在国内可以用其他非中文或者英文的其他种类的语言注册商标么,例如泰语,日语这种看着就不是字母或者汉字 不超过10个中文字符或20个非中文字符 毛非是什么字 在画图时,常用的中文字高有哪些、采用什么字体?非中文字高有哪些? 非汉字书法的日本韩国书法 如何解决java.lang.NoClassDefFoundError错误 java.lang.ExceptionInInitializerError 这个错误 怎么解决 java.lang.noclassdeffounderror /时抛出问题,怎么解决 Win10飞行模式是什么 Win10飞行模式作用详细介绍 《三十而已》顾佳搭配的首饰也一个比一个美,你知道她的首饰是什么品牌吗? 《三十而已》中顾佳的穿搭很有气质,怎么样穿搭凸显气质? 如何看待《三十而已》顾佳为融入贵妇圈,掏家底也要买爱马仕Kelly 28? 《三十而已》顾佳一语道出*,如果梁正贤一穷二白,王漫妮还会爱他吗? 骨语2第一集黎亮送给顾佳轩的项链是什么牌子 毛晓彤在三十而已里戴的圆形戒指项链是哪个牌子的? 平价又不失高档,有哪些项链能同时满足这两个条件? 《三十而已》:再现“精致穷”,这部剧真实吗? 有什么小众却很高级的项链? 骨语2分集剧情 骨语2电视剧分集剧情介绍 范冰冰和贵妇合影站角落成陪衬,她要开始靠拢“贵妇圈”吗? 章泽天成现实版顾佳,名媛聚会被删照片,C位是谁? 杭州阔太因为买到假货脸都垮了,这是怎么回事? 为什么全职太太更容易遭受另一半出轨的事情? 从罗子君到顾佳,全职太太为何都遭遇背叛的命运?