gpt4 book ai didi

java - 在 Java 运行时加载 Linux .so 文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:26:09 27 4
gpt4 key购买 nike

我试图在运行时用 Java 加载一个 linux .so 文件,但我收到一个 UnsatisfiedLinkError。从我的 Test.class 运行下面的 java main 时,我传入了 -Djava.library.path=/Users/tom/codebase/jni/dist VM 参数。 libSample.so 文件位于/Users/tom/codebase/jni/dist 目录中。有任何想法吗?谢谢!

public class Test {

public static void main(String[] args) {
System.out.println(System.getProperty("java.library.path"));
//prints /Users/tom/codebase/jni/dist
System.loadLibrary("Sample");
}

}

VM 参数:

-Djava.library.path=/Users/tom/codebase/jni/dist

异常:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no Sample in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1758)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1045)
at Test.main(Test.java:9)

我还尝试使用直接方法(使用 System.load)并得到以下结果,如果这些有助于线程“main”中的任何异常 java.lang.UnsatisfiedLinkError:/Users/tom/codebase/jni/dist/libSample.so:找不到合适的图像。找到:/Users/tom/codebase/jni/dist/libCiscoEnergyWiseJni.so:未知文件类型,前八个字节:0x7F 0x45 0x4C 0x46 0x01 0x01 0x01 0x00

最佳答案

Linux 上的库通常以 libXXX.so 模式命名,我相信 Java 遵循该约定。所以 System.loadLibrary("Sample") 可能正在寻找 libSample.so。您可以通过制作一个快速测试程序来调用 System.mapLibraryName 来验证这一点并检查输出。

要解决此问题,假设这实际上是您遇到的问题,您可以重命名库文件或使用 System.load(不是 System.loadLibrary),这将加载由您传递给它的确切文件名指定的库,不进行任何转换。不过,后一种方法不可跨平台移植。

关于java - 在 Java 运行时加载 Linux .so 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8058205/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com