【发布时间】:2016-12-28 02:41:49
【问题描述】:
我正在处理的项目是一个服务器端 Clojure 项目,其中 Leiningen 作为我的构建工具。
当我尝试运行使用 Leiningen 的 uberjar 创建的 JAR 时,会出现问题。 JAR 依赖于我放置在以下位置的一些本机库:/usr/lib/nativedeps/so。
在运行 JAR 之前,我将环境变量 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 中的库路径。所以我跑了:
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:不能 打开共享对象文件:没有这样的文件或目录
这意味着找到了 JavaASAPSDK 库,但另一个名为 libprotobuf.so.6 的库(JavaASAPSDK 依赖于该库)无法找到找到了。
问题是两个库都在同一个目录中!
关于什么可能导致这个问题以及如何解决它的任何想法?
【问题讨论】:
-
ldd在so文件中给出了什么? -
问题中的 LD_LIBRARY_PATH 与 java.library.path 不同。故意的?
标签: jar clojure leiningen java.library.path