ejdb Java绑定不起作用" java.library.path中没有jejdb"

时间:2015-02-25 19:41:14

标签: java java-native-interface ejdb

我正在尝试让ejdb(http://ejdb.org/)的java绑定工作。 绑定可以在Github上找到:https://github.com/Softmotions/ejdb-java

可以通过通常的./configure && make && make install步骤构建绑定。结果是目标目录中的libjejdb.so文件和一个java库。

运行示例失败:

java -Djava.library.path=/Users/foo/test/lib -jar jejdb-sample1.jar
Exception in thread "main" java.lang.UnsatisfiedLinkError: no jejdb in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1119)
at org.ejdb.driver.EJDB.<clinit>(EJDB.java:56)
at org.ejdb.sample1.Main.main(Main.java:19)

我检查了提供的java.library.path,它确实包含libjejdb.so。

之后我创建了一个名为jejdb.som jejdb的多个副本,依此类推,以确保:

~/test/lib % file *
jejdb:             Mach-O 64-bit dynamically linked shared library x86_64
jejdb.so:          Mach-O 64-bit dynamically linked shared library x86_64
libjejdb.so:       Mach-O 64-bit dynamically linked shared library x86_64
libjejdb.so.1:     Mach-O 64-bit dynamically linked shared library x86_64
libjejdb.so.1.0.0: Mach-O 64-bit dynamically linked shared library x86_64

我仍然得到同样的错误......

代码中的库通过

加载
static {
    System.loadLibrary("jejdb");
}

我希望libjejdb.so是正确的文件名。

我很困惑,仍然找不到图书馆?

1 个答案:

答案 0 :(得分:1)

很奇怪,你能够在第一时间构建代码,因为在我这边我需要更改configure,configure.ac和Makefile.in中的东西,以便能够在MacOSX上正确编译

但是,假设这不是一个真正的问题,我做了以下操作来运行示例并假设您的.so文件安装在〜/ test / lib中,如上所述

# remove un-needed environment variable
unset LD_LIBRARY_PATH
# set proper shared library names on MacOSX in 
for n in libjejdb.dylib libjejdb.1.dylib libjejdb.1.0.0.dylib; do ln -s libjejdb.so ~/test/lib/$n; done
# Relaunch example using your previous command
java -Djava.library.path=/Users/foo/test/lib -jar jejdb-sample1.jar

希望这能解决您的问题

祝你好运