Java 运行 Clojure JAR 时找不到本机库
Java can't find native libraries when running Clojure JAR
我正在处理的项目是服务器端 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: no JavaASAPSDK in java.library.path
这意味着链接器无法找到 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: cannot
open shared object file: No such file or directory
这意味着找到了 JavaASAPSDK 库,但是找到了另一个名为 libprotobuf.so.6 的库(JavaASAPSDK 依赖于) 找不到。
问题是两个库都在同一个目录中!
关于导致此问题的原因以及解决方法的任何想法???
我通过删除解决了问题:
libprotobuf.so.6
并创建一个名为 'libprotobuf.so.6' 的符号 link 到一个 运行 与 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' 读取我的本地 deps 的路径并重新绑定其中的本地库。
这似乎完成了工作。
我正在处理的项目是服务器端 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: no JavaASAPSDK in java.library.path
这意味着链接器无法找到 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: cannot open shared object file: No such file or directory
这意味着找到了 JavaASAPSDK 库,但是找到了另一个名为 libprotobuf.so.6 的库(JavaASAPSDK 依赖于) 找不到。
问题是两个库都在同一个目录中!
关于导致此问题的原因以及解决方法的任何想法???
我通过删除解决了问题:
libprotobuf.so.6
并创建一个名为 'libprotobuf.so.6' 的符号 link 到一个 运行 与 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' 读取我的本地 deps 的路径并重新绑定其中的本地库。
这似乎完成了工作。