java.lang.UnsatisfiedLinkError:com.example.program.ClassName.fooL

问题描述

我无法运行库的方法。 我的库位于我的PATH中,并且通过以下代码也可以正确加载:

    System.loadLibrary("FTDIInterface");

但是功能不起作用。 我收到以下异常:

Caused by: java.lang.UnsatisfiedLinkError: Messgeraet.src.net.sf.yad2xx.FTDIInterface.getDevices()[LMessgeraet/src/net/sf/yad2xx/Device;
at Messgeraet.src.net.sf.yad2xx.FTDIInterface.getDevices(Native Method)
at Messgeraet.src.Emu.EmuConnection.<init>(EmuConnection.java:22)
at Messgeraet.src.Emu.EmuModel.connect(EmuModel.java:27)
at Messgeraet.src.JavaFX.FXController.connect(FXController.java:112)
... 62 more

我正在使用日食。在IntelliJ中,它运行良好,并且我还得到了另一个包含库的eclipse项目,没有任何问题。

为什么它不能运行我的方法FTDIInterface.getDevices?

解决方法

您的包裹似乎已关闭; Messgereat.src听起来像您有一个名为Messgereat的项目目录,在其中有一个带有Java源代码的名为“ src”的文件夹,并且您配置了错误的构建工具;正确的软件包名称听起来应该是:package net.sf.yad2xx;,但是由于构建配置错误,它无法正常工作,因此您决定通过更新package语句来解决此问题,但是这破坏了JNI绑定

然后的解决方案是撤消您对package语句所做的所有更改,并修复您的构建脚本。

或者,如果您确实确实打算使用该奇怪的软件包,请确保已使用完全相同的构建设置执行了javah并将其用作JNI代码的基础。如果已完成此操作,请将导出的符号包括在库中,作为@ user2543253建议的注释。

NB:您的loadLibrary调用完全可以工作有点奇怪; PATH与它无关,但是大概是因为您的库位于库路径上列出的位置,该路径是名为“ java.library.path”的(VM的,而不是操作系统的)系统属性。 ';您可以通过以下方式进行设置:

java -Djava.library.path=/path1:/path2 -cp /path/to/dep1.jar:/path/to/dep2.jar com.foo.Main

由于这种混乱,也有可能正在加载另一个也称为FTDIInterface的本机lib文件,而不是您认为正在加载的文件。如果您想确定正在加载的内容,请运行System.load("/absolute/path/to/the/dll-jnilib-or-so-libraryfile.so");-您肯定会知道。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...