我有一个简单的Spring Boot项目,可以加载本机库。问题是我不知道在运行应用程序时如何指定本机库的路径。
我读了无数的帖子,解释了如何设置,java.library.path但是每一个都会导致
java.library.path
java.lang.UnsatisfiedLinkError: /path/to/lib/libconnector.so: libconnector.so: cannot open shared object file: No such file or directory
如果我从命令行按顺序运行以下两个命令,则该项目有效:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/lib ./gradlew bootRun
该库已加载并可以工作。但是我无法在我的gradle文件中指定库路径。我试过了
run { systemProperty 'java.library.path', file('/path/to/lib') } bootRun { systemProperty 'java.library.path', file('/path/to/lib') }
以及各种变化。还尝试将VM参数添加到我的IDE等,但没有任何效果。有人可以解释我在做什么错吗?
这就是我加载本地库(位于中$projectRoot/lib)的方式:
$projectRoot/lib
static { // load connector library File lib = new File("lib/" + System.mapLibraryName("connector")); System.load(lib.getAbsolutePath()); }
我终于解决了我的问题。运行应用程序时,我应该将其LD_LIBRARY_PATH作为环境变量而不是java.library.path作为系统属性传递。
LD_LIBRARY_PATH
以下Gradle修改解决了我的问题:
tasks.withType(JavaExec) { environment('LD_LIBRARY_PATH', 'lib') }