1

我有一个使用本地库 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 中得到空值,我认为因此我得到了不满意的链接错误。

这是我的测试代码:

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");

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

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

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

4

2 回答 2

1

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

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

更新

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

在此处输入图像描述

选择选项卡“环境”,然后单击“新建”,您将知道其余部分该怎么做。

于 2013-07-26T10:12:17.343 回答
1

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

于 2013-07-26T10:19:55.920 回答