加载共享库时出错;无法打开共享对象文件:没有这样的文件或目录

时间:2015-04-02 17:11:41

标签: java ubuntu java-native-interface shared-libraries unsatisfiedlinkerror

在Ubuntu操作系统上从java类加载共享库(JNI)时遇到问题

Exception in thread "main" java.lang.UnsatisfiedLinkError: /opt/ETcpsdk/lib/linux-x86_64/libjcryptoki.so: libcryptoki.so: cannot open shared object file: No such file or directory
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965)
    at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890)
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1880)
    at java.lang.Runtime.loadLibrary0(Runtime.java:849)
    at java.lang.System.loadLibrary(System.java:1088)
    at tutorialjni.Test.<clinit>(Test.java:7)

- Test.java

package tutorialjni;

public class Test {

    // Load an external library, called "jcryptoki"
    static {
        System.loadLibrary("jcryptoki");
    }

    public static void main(String[] args) {
        System.out.println(System.getProperty("java.library.path"));
    }

}

- LD_LIBRARY_PATH 已在/ etc / environment

中分配
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
JAVA_HOME="/opt/jdk1.7.0_75"
LD_LIBRARY_PATH="/opt/ETcpsdk/lib/linux-x86_64:/opt/ETcpsdk/lib/"

我拥有ETcpsdk文件夹。

  • libcryptoki.so放入/opt/ETcpsdk/lib/linux-x86_64/libcryptoki.so

  • 运行文件libcryptoki.so 命令

    libjcryptoki.so:ELF 64位LSB共享对象,x86-64, 版本1(SYSV),动态链接,未剥离

- JDK版本:

java version "1.7.0_75"
Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)

- Ubuntu:

Distributor ID: Ubuntu
Description:    Ubuntu 14.04.2 LTS
Release:    14.04
Codename:   trusty

我将库目录添加到ldconfig缓存

你能帮助我吗?

2 个答案:

答案 0 :(得分:3)

我遇到了这个问题,因为我的共享库依赖于另一个无法正常工作的共享库。

答案 1 :(得分:0)

如果您在Linux上遇到此问题,通常有3个主要原因:

  1. 您的库取决于环境PATH。

解决方案::将路径变量设置为.bashrc,以便在启动时加载。 重新启动Linux或运行。 〜/ .bashrc。

  1. 库文件符号链接断开。 Linux应用程序曾经在集中位置创建文件作为符号链接,而不是将它们指向专用路径下的实际文件。

解决方案::检查您的库文件是否以链接形式存在,以及是否指向有效文件。

  1. 用户的访问权限不足。

当我的Web应用程序是在Linux中由用户访问权限不足的用户登录启动时遇到此错误的。此错误通常会伴随其他错误/异常,尤其是来自您的应用程序服务器(例如Tomcat)的错误/异常:

  

org.apache.catalina.LifecycleException:无法初始化组件...

  

org.hibernate.engine.jdbc.internal.LobCreatorBuilder-HHH000424:当createClob()方法引发错误时,禁用上下文LOB创建:java.lang.reflect.InvocationTargetException

解决方案: 停止您的Web /应用程序服务器当前实例。 以超级用户或具有足够访问权限(即root)的用户登录 重新启动服务器或再次调用上一个功能。