加载共享库时出错;无法打开共享对象文件:没有这样的文件或目录
问题描述:
我从加载Java类的共享库(JNI)时,在Ubuntu系统操作加载共享库时出错;无法打开共享对象文件:没有这样的文件或目录
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 /环境中
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
你能帮助我吗?
答
我得到了这个问题,因为我的共享库依赖于另一个共享库工作不正常。