我们在 Java 应用程序中使用 LMDB。可用的 Java 绑定已有 1 年历史。我想刷新 LMDBJNI https://github.com/chirino/lmdbjni
但是,项目所有者没有提供有关如何构建项目的任何说明。所以我不能只克隆他的 git 存储库,然后删除新版本的 LMDB ( https://git.gitorious.org/mdb/mdb.git ) c 和 h 文件,然后重建它
LMDB JNI 下面似乎正在使用 hawkjni,但据我所知。
这些是我尝试过的步骤
a) git clone https://github.com/chirino/lmdbjni.git b) cd lmdbjni;mvn install 它成功完成,但是生成的 JAR 没有编译实际的 lmdb 库。所以我的测试程序失败了
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:293)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.UnsatisfiedLinkError: Could not load library. Reasons: [no lmdbjni64-99-vspmaster-SNAPSHOT in java.library.path, no lmdbjni-99-vspmaster-SNAPSHOT in java.library.path, no lmdbjni in java.library.path]
at org.fusesource.hawtjni.runtime.Library.doLoad(Library.java:182)
at org.fusesource.hawtjni.runtime.Library.load(Library.java:140)
at org.fusesource.lmdbjni.JNI.<clinit>(JNI.java:41)
at org.fusesource.lmdbjni.Env.create(Env.java:42)
at org.fusesource.lmdbjni.Env.<init>(Env.java:36)
at com.db.locrefdcache.App.main(App.java:27)
... 6 more
c) 然后我想,我可能不仅仅能够为 lmdbjni 运行 mvn install,而是需要显式构建它的 64 位 Linux 子系统
所以我做了 cd lmdbjni/lmdbjni-linux64 mvn install
在那里我可以看到它试图运行配置脚本(由自动工具生成),但我得到了
...
[INFO] checking lmdb.h usability... no
[INFO] checking lmdb.h presence... no
[INFO] checking for lmdb.h... no
[INFO] configure: error: cannot find headers for lmdb
[INFO] rc: 1
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
所以我不太明白的是 lmdb 文件(lmdb.h、mdb.c、midl.h)是否需要显式删除,或者 hawkjni 是否需要在它们之前运行并创建某种“中间” c 和 h 文件稍后会被放入此构建环境中。
使用 LMDBJNI deephacks fork 更新时出现编译错误 重新编译的原因:DeepHacks 的 LMDBJNI 项目使用最新的 LMDB 生成了 LMDBJNI 的 maven 存档,但是它是用 Java 8 编译的(我们尚未使用)。所以我需要用 Java 7 重新编译它。
我修改了 pom.xml 并将 Sources 1.8 更改为 1.7 然后, mvn install -P linux64 产生错误
...
[INFO] [hawtjni:build {execution: default}]
[INFO] Extracting /home/dev01/.m2/repository/org/deephacks/lmdbjni/lmdbjni/0.1.3-SNAPSHOT/lmdbjni-0.1.3-SNAPSHOT-native-src.zip to /home/dev01/devel/3dp/lmdbjni/lmdbjni-linux64/target/native-build-extracted
[INFO] executing: /bin/sh -c make install
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] build failed: org.apache.maven.plugin.MojoExecutionException: Make based build did not generate: /home/dev01/devel/3dp/lmdbjni/lmdbjni-linux64/target/native-build/target/lib/liblmdbjni.so