运行Clojure JAR时,Java无法找到本机库

时间:2016-08-21 12:54:08

标签: jar clojure leiningen nativelibrary java.library.path

我正在开发的项目是一个服务器端Clojure项目,其中包含 Leiningen 作为我的构建工具。

当我尝试运行使用 Leiningen 的uberjar创建的JAR时,会出现问题。 JAR依赖于我放置的一些本机库: / usr / lib / nativedeps / so

在运行JAR之前,我使用本机libs路径导出环境变量 LD_LIBRARY_PATH ,以便链接器知道在哪里查找本机库:

export LD_LIBRARY_PATH=/usr/lib/ctch/so

然后我运行JAR:

java -jar externalapibe-0.1.0-standalone.jar 3001

会引发异常:

  

java.lang.UnsatisfiedLinkError:java.library.path中没有JavaASAPSDK

这意味着链接器无法找到 JavaASAPSDK (这是 / usr / lib / nativedeps / so 中的本机库之一)并且我需要指定 java.library.path 中的lib路径。所以我跑:

java -Djava.library.path=/usr/lib/nativedeps/so -jar externalapibe-0.1.0-standalone.jar 3001

会引发异常:

  

java.lang.UnsatisfiedLinkError中:   /usr/lib/nativedeps/so/libJavaASAPSDK.so:libprotobuf.so.6:不能   打开共享对象文件:没有这样的文件或目录

这意味着找到了lib JavaASAPSDK ,但另一个名为 libprotobuf.so.6 的库( JavaASAPSDK 依赖于它)不能被发现。

问题是两个库都在同一个目录中!

关于什么可能导致这个问题以及如何解决它的任何想法?

1 个答案:

答案 0 :(得分:1)

我通过删除来解决了这个问题:

libprotobuf.so.6

创建名为' libprotobuf.so.6'的符号链接到一个与libprotobuf.so.6完全相同的库,命名为libprotobuf.so.6.0.0。

然后我在/etc/ld.so.conf.d /

中创建了一个配置文件
touch /etc/ld.so.conf.d/externalapibe.conf

并在其中写下我的原生图书馆的路径:

/usr/lib/nativedeps/so

然后我跑了:

ldconfig -v | grep /usr/lib/nativedeps/so

从externalapibe.conf'中读取了我的原生代的路径。并重新绑定了其中的本地库。

这似乎做了工作。