项目中把 so 库文件放到了 jar 包里,在 static 代码块中调用如下代码加载 so 库
try (InputStream in = getResource(path)) {
// 写入 jar classpath 里的 so 文件到外部临时文件
File temp = new File(TEMP_DIR + name);
FileUtils.copyInputStreamToFile(Objects.requireNonNull(in), temp);
String absolutePath = temp.getAbsolutePath();
Runtime.getRuntime().exec(new String[] {"/bin/chmod", "755", absolutePath});
log.info("加载企业微信会话存档 SDK LIB 开始, {}", absolutePath);
System.load(absolutePath);
log.info("加载企业微信会话存档 SDK LIB 结束, {}", absolutePath);
} catch (Throwable e) {
log.error("加载企业微信会话存档 SDK LIB, 异常", e);
}
整个方法没有报错,通过 pldd 命令查看也有 /tmp/libWeWorkFinanceSdk_Java.so
的输出
但是调用 native jni 方法的时候仍然报错 java.lang.UnsatisfiedLinkError: no WeWorkFinanceSdk_Java in java.library.path
后面通过设置环境变量 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/
却可以正常工作
这是什么问题 🤔
1
MoHen9 97 天前
|
3
pagxir 97 天前 via Android
system.load(name) 会解释成 libname.so , 至于你填绝对路径会解释成啥就不清楚了。
|
4
pagxir 97 天前 via Android
既然 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/ 可以正常工作,为啥不用它。
|
6
iminto 96 天前 via Android
估计是加载位置不对,放 static 块里试试
|