【问题标题】:System.load giving Unsatisfied Link ErrorSystem.load 给出不满意的链接错误
【发布时间】:2013-07-26 10:06:53
【问题描述】:

我有一个使用本地库 libclient.so 的应用程序。这取决于另一个 .so 文件。

我尝试在 linux 32 位系统上使用命令行设置 LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/home/usb:${LD_LIBRARY_PATH}

将路径设置为:

tushar@tushar-desktop:~$ echo $LD_LIBRARY_PATH
/home/usb:/home/tushar/workspace/MinutiaeApp/resources:

但是当我尝试运行我的代码时,我在 LD_LIBRARY_PATH 中得到 null,我认为因此我得到了不满意的链接错误。

这是我的测试代码:

String lib = "libclient.so";
String ld_lib_path = System.getenv("LD_LIBRARY_PATH");
System.out.println("***LD_LIBRARY_PATH ***"+ ld_lib_path); // **GIVING NULL**
String[] paths = ld_lib_path.split(":");
for(int i=0; i<paths.length; i++) {
    String p = paths[i];
    File x = new File(p, lib);
    System.out.println("***Path name *****" + i + " : "+ x.getAbsolutePath());
    if (x.exists()) {
        System.out.println("Exist");
       System.load(x.getAbsolutePath());
       break;
    }
 }

实际代码:

System.load("/home/usb/libclient.so"); // **HERE I am getting Unsatisfied Link Error**

更新: 我已经在 VM 参数中设置了 LD_LIBRARY_PATH,并且在我的 java 代码中运行以下行时获得了路径名。这样路径就设置好了。

 String ld = System.getProperty("LD_LIBRARY_PATH");

现在的问题是,当我尝试使用 System.load("/home/arun/libgrfinger.so") 加载 libgrfingerjava.so 时,我仍然收到 Unsatisfied Link 错误。

我尝试加载其他一些 .so 文件并且我能够做到。我不知道为什么我只在libgrfingerjava.so 上收到错误。

我正在将Griaule Finger SDK 2009 集成到我的手指阅读应用程序中。

【问题讨论】:

    标签: java linux java-native-interface environment-variables unsatisfiedlinkerror


    【解决方案1】:

    您是否在同一个 shell 中运行您的程序?

    如果您正在设置 LD_LIBRARY_PATH,则需要在同一个 shell 中运行您的应用程序,如果您在“窗口控制台”中修改环境并在 Eclipse 或其他窗口中运行您的程序,则它不起作用。

    更新

    如果您使用的是 Eclipse,在您的菜单中,转到项目 --> 属性 --> 运行/调试设置,然后选择您正在使用的配置并进行编辑,您将看到这个窗口:

    选择“环境”选项卡,然后单击“新建”,您将知道剩下的要做什么。

    【讨论】:

    • 我正在使用 Eclipse。你能指导我在eclipse配置中设置它吗?
    • 添加了 Eclipse 帮助,试试看
    • 我已经尝试在环境配置中设置LD_LIBRARY_PATH中库目录的路径,但我不知道它仍然显示为NULL。
    【解决方案2】:

    您应该尝试从您设置 LD_LIBRARY_PATH 的同一终端运行此程序。

    【讨论】:

    • 我正在使用 Eclipse。你能指导我在eclipse配置中设置它吗?
    • 在 VM 参数中尝试设置为 -DLD_LIBRARY_PATH=PATH\TO\THE FILE 然后尝试像这样System.getProperty("LD_LIBRARY_PATH"); 谢谢
    • 请确保您的路径中没有空格,然后将完整路径放在双引号中。 - 谢谢
    • 我已根据您的建议在 VM 参数中设置了 LD_LIBRARY_PATH。现在我在检查 System.getProperty("LD_LIBRARY_PATH") 时得到库路径名。但是 System.load(library) 仍然没有在应用程序中加载库。可能是什么问题?
    • 假设您在 Windows 上运行它..您已经将它加载到这样的库路径中,它将需要一个 .dll 文件。 (给出你的 DLL 文件的绝对路径)-Djava.library.path=PATH\TO\DLL JVM 将在 java.library.path 系统属性中搜索你的 dll 文件。相反,如果您在 linux 中运行,它将需要一个 .so 文件。
    猜你喜欢
    • 2012-04-22
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    • 2014-03-26
    • 1970-01-01
    相关资源
    最近更新 更多