gpt4 book ai didi

java - Tomcat 中的共享 JNI 库 (.so) - UnsatisfiedLinkError

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:36 28 4
gpt4 key购买 nike

我有一个在 Tomcat7 中部署的两个 Web 应用程序之间共享的 JNI 库 (.so)。我在正在部署的第一个 Web 应用程序中仅使用 System.loadLibrary 加载一次库,然后在第二个中我检查它是否已经加载以不再加载(我尝试在两者中加载它并且我得到 UnsatisfiedLinkError - 库由另一个类加载器加载)。我可以在第一个应用程序中对 native 库进行任何调用,但在第二个应用程序中,我得到 UnsatisfiedLinkError 以及我尝试调用的方法名称。

我已经想不出自己能做什么了。有任何想法吗?我在 SO 上尝试了大部分解决方案。谢谢。

编辑是的,我尝试将库添加到 tomcat lib 文件夹中并从那里加载它。最初它位于 bin 文件夹中,但出现了同样的问题。

最佳答案

是的,当您尝试加载已经加载了我的另一个 Web 应用程序的库时,就会发生这种情况。 Tomcat,为每个 Web 应用程序使用单独的类加载器,它不允许您通过另一个类加载器将同一个 native 库多次加载到 JVM

移动任何共享 jar 文件(如果有的话)从您的 sharedlib.so 使用 JNI。将系统路径添加到 sharedlib ,

export LD_LIBRARY_PATH=/path/to/whereyourlinklibrary

像这样编写一个简单的类,使您能够在 tomcat 启动时加载您的共享库。只需编译此类并将其放入 tomcat lib 文件夹中

package msm;
public class DLLBootstrapper {

static {
System.loadLibrary("sharedlib");
}

public static void main(String args[]) {
System.out.println("Loaded");
}

}

您现在可以从您的任何 Web 应用程序(可能在启动监听器中)加载此类

Class.forName("msm.DLLBootstrapper");

干得好!

关于java - Tomcat 中的共享 JNI 库 (.so) - UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40043849/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com