我有一个使用一个本机库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整合到我的手指阅读应用程序中。
答案 0 :(得分:1)
您是否在同一个shell中运行程序?
如果您正在设置LD_LIBRARY_PATH,则需要在同一个shell中运行应用程序,如果您正在修改“窗口控制台”中的环境并在Eclipse或其他窗口中运行您的程序,则它不起作用。
更新
如果您使用的是Eclipse,请在菜单中转到Project - &gt;属性 - &gt;运行/调试设置,然后选择您正在使用的配置并进行编辑,您将看到以下窗口:
选择“环境”标签,然后点击“新建”,您将知道该怎么做。
答案 1 :(得分:1)
你应该尝试从你设置LD_LIBRARY_PATH的同一个终端运行这个程序。