ejdb Java 绑定不工作 "no jejdb in java.library.path"
ejdb Java binding not working "no jejdb in java.library.path"
我正在尝试使 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.somjejdb,等等,只是为了确定:
~/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 是正确的文件名。
我很困惑,还是找不到图书馆?
奇怪的是,您首先能够构建代码,因为在我这边,我需要更改配置中的内容,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
希望这能解决您的问题
此致
我正在尝试使 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.somjejdb,等等,只是为了确定:
~/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 是正确的文件名。
我很困惑,还是找不到图书馆?
奇怪的是,您首先能够构建代码,因为在我这边,我需要更改配置中的内容,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
希望这能解决您的问题
此致