首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java绑定LMDB,需要帮助刷新LMDB

Java绑定LMDB,需要帮助刷新LMDB
EN

Stack Overflow用户
提问于 2014-08-01 19:57:14
回答 1查看 2.7K关注 0票数 1

我们正在java应用程序中使用LMDB。可用的Java绑定是1岁的。我想刷新LMDBJNI https://github.com/chirino/lmdbjni

然而,项目所有者没有提供任何关于如何构建他的项目的说明。因此,我不能只是克隆他的git存储库,删除LMDB ( https://git.gitorious.org/mdb/mdb.git )c和h文件的新版本,然后重建它。

似乎在LMDB下面使用hawkjni,但这就是我所得到的。

这些是我尝试过的步骤

( a) git克隆https://github.com/chirino/lmdbjni.git b) clone;mvn安装成功完成,但是生成的JAR没有编译实际的lmdb库。所以我的测试程序失败了

代码语言:javascript
复制
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安装,还需要显式地构建它的64位Linux子系统

所以我做了cd lmdbjni/lmdbjni-linux64 64 mvn安装。

在这里,我可以看到它试图运行配置脚本(由自动工具生成),但是我得到了

代码语言:javascript
复制
...
[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重新编译的原因:DeepHack的LMDBJNI项目用最新的LMDB为LMDBJNI生成了一个maven存档,但是它是用Java 8编译的(我们还没有使用)。所以我需要用Java 7重新编译它。

我修改了pom.xml并将源代码更改为1.8到1.7,然后,mvn安装-P linux64会产生一个错误

代码语言:javascript
复制
...
[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
EN

回答 1

Stack Overflow用户

发布于 2014-08-04 08:02:31

它在我的机器上用Java 7构建得很好。您在构建包时提供了正确的配置文件吗?对于linux,您必须使用: mvn安装-P linux64

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25087762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档