V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wbd31
V2EX  ›  Java

Java jni 加载 so 失败,提示 Java .lang.UnsatisfiedLinkError: no xxx in Java .library.path

  •  
  •   wbd31 · 98 天前 · 1371 次点击
    这是一个创建于 98 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目中把 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/ 却可以正常工作

    这是什么问题 🤔

    6 条回复    2024-07-31 12:42:08 +08:00
    MoHen9
        1
    MoHen9  
       98 天前
    怎么还把 so 拷到 jar 包外面?实在不行就用 JNA 的库调用,JNA 调用特别简单,网上有很多 demo

    https://github.com/java-native-access/jna
    wbd31
        2
    wbd31  
    OP
       98 天前
    @MoHen9 不拷贝到外面,so 文件放到 resources 目录里打成 jar 包之后没法通过 System.load 进来
    pagxir
        3
    pagxir  
       98 天前 via Android
    system.load(name) 会解释成 libname.so , 至于你填绝对路径会解释成啥就不清楚了。
    pagxir
        4
    pagxir  
       98 天前 via Android
    既然 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tmp/ 可以正常工作,为啥不用它。
    iminto
        5
    iminto  
       97 天前 via Android
    @MoHen9 so 文件必须从 jar 里拷出来再加载,jar 里面的路径属于 url 路径,非物理路径。




    @wbd31
    iminto
        6
    iminto  
       97 天前 via Android
    估计是加载位置不对,放 static 块里试试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2929 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 14:58 · PVG 22:58 · LAX 06:58 · JFK 09:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.