System.load给出不满意的链接错误

时间:2013-07-26 10:06:54

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

我有一个使用一个本机库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代码中运行follwing line时获取路径名。所以路径已经确定。

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

更新

如果您使用的是Eclipse,请在菜单中转到Project - &gt;属性 - &gt;运行/调试设置,然后选择您正在使用的配置并进行编辑,您将看到以下窗口:

enter image description here

选择“环境”标签,然后点击“新建”,您将知道该怎么做。

答案 1 :(得分:1)

你应该尝试从你设置LD_LIBRARY_PATH的同一个终端运行这个程序。