java.lang.UnsatisfiedLinkError: com.example.program.ClassName.foo()L
java.lang.UnsatisfiedLinkError: com.example.program.ClassName.foo()L
我无法 运行 库的方法。
我的库在我的 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 的项目目录,其中有一个名为 'src' 的文件夹和你的 java 源,并且你错误地配置了你的构建工具;正确的包名称听起来应该是:package net.sf.yad2xx;
,但由于配置错误,它无法正常工作,您决定通过更新 package
语句来解决问题,但这破坏了您的 JNI 绑定.
解决方案是撤消您对包语句所做的所有更改,并修复您的构建脚本。
或者,如果您真的打算使用那个奇怪的包,那么请确保您已经使用完全相同的构建设置执行了 javah,并将其用作您的 JNI 代码的基础。如果您这样做了,请按照@user2543253 建议的评论将导出的符号包含在库中。
注意:您的 loadLibrary 调用完全有效,这有点奇怪; PATH 与它无关,但据推测你的库恰好位于你的库路径中列出的一个地方,这是系统 属性(VM 的,而不是你的 OS ) 命名为 'java.library.path';你设置它例如:
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");
- 那么您肯定知道。
我无法 运行 库的方法。 我的库在我的 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 的项目目录,其中有一个名为 'src' 的文件夹和你的 java 源,并且你错误地配置了你的构建工具;正确的包名称听起来应该是:package net.sf.yad2xx;
,但由于配置错误,它无法正常工作,您决定通过更新 package
语句来解决问题,但这破坏了您的 JNI 绑定.
解决方案是撤消您对包语句所做的所有更改,并修复您的构建脚本。
或者,如果您真的打算使用那个奇怪的包,那么请确保您已经使用完全相同的构建设置执行了 javah,并将其用作您的 JNI 代码的基础。如果您这样做了,请按照@user2543253 建议的评论将导出的符号包含在库中。
注意:您的 loadLibrary 调用完全有效,这有点奇怪; PATH 与它无关,但据推测你的库恰好位于你的库路径中列出的一个地方,这是系统 属性(VM 的,而不是你的 OS ) 命名为 'java.library.path';你设置它例如:
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");
- 那么您肯定知道。