java not found多线程同时调用俩个jna的 Native.loadLibrary加载动态库使用会造成阻塞吗

因项目催得很急尽管对JNA(java not found调用Windows动態库)不熟悉,还是使用了JNA库那么使用自己不了解的东西,总是很容易出现各种奇怪的问题可反过来想想,哪有不存在技术难点的项目呢是吧?当程序员就是个辛苦的行业被项目逼着不停地去学习,去解决问题;但正因如此程序员也是快乐的人,因为解决问题后獲得的成就感和喜悦感是很值得的。呵呵不废话了,分享下我使用JNA遇到的问题及解决办法吧

大体意思是,JNA用到 libffi 库通过这个库将 需要調用的 DLL 库加载到一个临时文件,当使用完毕后再释放 libffi 库。

然后知道需要临时文件,那么就查找 JNA 的临时文件再哪有两种情况:一是临時文件夹不存在;二是java not found对临时文件夹没有写的权限。

到这时我发现了咱们的 tomcat 下没有 temp 这个文件夹,马上创建这个文件夹试试呵呵,就解決了!

}

首先是 JNA 需要的两个 依赖包

项目中 dll 文件存放位置

两种方式存放,选择任意┅种都可以(推荐第一种)

找到一个 dll 需要实现的接口(可以从对应的.h 文件中查找)

在 java not found 代码中调用接口(C/C++与 java not found 类型对照表请往下看)

* 参数1:需要调用的dll文件名 * 根据C与java not found参数对照表写出对应接口

}

1、底层dll库创建AddDll.dll此处需要制定32位or64位动态库(本人以32位为例)

//开放调用接口,及参数
// 获取当前dll库的句柄 // 获取当前句柄的路径 // 解析组合底层dll的运行路径(此处需在两个dll在同一個目录的情况下) // 根据解析路径加载底层dll

注:在创建AddDllTwo.dll时,一、LoadLibrary仅传入dll名称(即AddDll.dll)若将两个dll放在工程目录下可以调用成功(根因和LoadLibrary的路徑搜索路径范围有问题);若将两个dll放到其他盘符目录下,再次Demo调用时出现崩溃(即无法正确查找AddDll.dll的路径);二、LoadLibrary传入绝对路径,通过上层AddDllTwo.dll嘚路径来解析底层AddDll.dll路径并传入LoadLibrary,可以在任何路径下运行成功(需将两个dll(AddDllTwo.dll,AddDll.dll)放在同一目录下)

注:jna调试过程中需1、dll库位数与jdk保持一致(即同为32位或者64位);2、函数名需与dll开放接口保持一致;3、dll路径问题

 
}

我要回帖

更多关于 java not found 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信