我正在开发的项目是一个服务器端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 依赖于它)不能被发现。
问题是两个库都在同一个目录中!
关于什么可能导致这个问题以及如何解决它的任何想法?
答案 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'中读取了我的原生代的路径。并重新绑定了其中的本地库。
这似乎做了工作。