2023-01-21 278
我在Tomcat7中部署的两个Web应用程序之间共享了一个JNI库(.SO).我使用系统加载库.在要部署的第一个Web应用程序中,只有一次,然后在第二个Web应用程序中,然后在第二个网络应用程序中检查它是否已经加载到不再加载(我尝试将其加载到两者中,而我却不舒服. – 库由另一个classloader加载).我可以在第一个应用程序中对本机库进行任何调用,但是在第二个应用程序中,我对我要调用的方法名称感到不满意.
我对我能做什么的想法已经用尽.有任何想法吗?我尝试了大多数解决方案.
谢谢.
编辑
是的,我尝试在Tomcat Lib文件夹中添加库,然后从那里加载它.最初是在bin文件夹中,并且发生了相同的问题.
是的,当您尝试加载已经加载我的另一个Web应用程序的库时,这将发生. tomcat,为每个Web应用程序使用单独的类加载程序,并且不允许您通过另一个类加载程序
将相同的本机库多次加载到JVM
如果任何消耗您的jni sharedlib.so的共享JAR文件,请移动任何共享JAR文件.将系统路径添加到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");
很好!
您是否尝试将共享JNI库只是在服务器的LIB目录中.
您需要从服务器类中加载任何本机代码,而不是WebApp ClassLoader.我建议编写一个将共享对象的二进制图像加载到VM中的Listener.这只会发生一次. Please see the AprLifecycleListener如何正确地做到这一点.它包括一个JNI组合,可能完全代表您的情况.
共享对象必须驻留在${catalina.home}/lib和LD_LIBRARY_PATH帽子中才能指向它.
以上所述是小编给大家介绍的Tomcat中共享的JNI库(.so)-不满意的链接错误,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26224.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态