关于jna的so动态链接库的调用问题

杨某某 发布于 2015/05/30 00:02
阅读 552
收藏 0
JNA

场景描述一下:

场景一:两个web应用都在使用同一个so动态链接库,被同一个web服务器启动,比如一个tomcat下添加了两个相同的web应用,这时候,在两个web应用中对动态链接库的调用就是后来者获取不到so资源,若是整合下两个web应用为一个应用,意思就是调用公用的接口操作so,这个可以执行。

场景二:在两个不同的工程中,用两个main函数调用各自的jna提供的接口(实际上最终都是访问系统目录下同一个so),该情况下两个main函数启动的应用都是可以正常调用的!

场景三:一个应用用main函数启动jna调用,一个应用用web服务器调用,结果就是相互存在so资源争夺,

后来者无法获取so!

总结:看了下同事写的代码在jna的类中用到了static区块写“system.load”去加载jna,我去掉了,改为Native.loadLibrary就不会出现这种问题,请大神帮忙分析一下,虽然问题解决了,但是新的问题由来了,我现在用的最新的jna 4.0这样是解决了问题,但是某单位非要用jna3.5,说的是他们平台适配的版本,用了jna 3.5又出现了以上场景的问题, 报错是找不到“libjnidispatch.so” 该库不是我们应用调用的,是jna内部调用的,没准就是static干的,但是真的要动手改源码吗??

加载中
返回顶部
顶部