用于LMDB的Java绑定,需要帮助刷新LMDB JNI

V P*_*V P 1 java-native-interface lmdb

我们在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
Run Code Online (Sandbox Code Playgroud)

c)然后我想,我可能不仅能够为lmdbjni运行mvn install,而是需要显式构建它的64位Linux子系统

所以我做了cd lmdbjni/lmdbjni-linux64 mvn install

在那里,我可以看到它试图运行配置脚本(由autotools生成),但我得到了

...
[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
Run Code Online (Sandbox Code Playgroud)

所以我不太明白lmdb文件(lmdb.h,mdb.c,midl.h)是否需要在某处显式删除,或者hawkjni是否需要先在它们上运行并创建某种"中间" c和h文件稍后将被放入此构建环境中.


使用编译错误更新我得到的,当使用LMDBJNI deephacks fork重新编译的原因:DeepHacks的LMDBJNI项目已经为LMDBJNI生成了一个带有最新LMDB的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
Run Code Online (Sandbox Code Playgroud)

hyc*_*hyc 7

你可能会有更好的运气,这个叉子正在积极维护

https://github.com/deephacks/lmdbjni

他们还在Maven中提供了LMDB,您可以在这里看到它是如何设置的

https://github.com/deephacks/lmdb