1

我正在处理的项目是一个服务器端 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:无法打开共享对象文件:没有这样的文件或目录

这意味着找到了 lib JavaASAPSDK,但找不到另一个名为libprotobuf.so.6JavaASAPSDK所依赖的)的 lib。

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

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

4

1 回答 1

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”中读取了我的本机部门的路径,并在其中重新绑定了本机库。

这似乎起到了作用。

于 2016-08-23T15:00:38.533 回答