您的位置:首页 > 编程语言 > Java开发

windows下使用eclipse java程序调用.so文件

2017-08-15 16:29 316 查看
问题描述: Java项目,做中间件的,之前是在Linux系统下开发,用JNI调用内核部提供的.so文件,但是现在又要Windows系统下测试运行情况,所以提出了题目中的问题:怎么在Windows下使用eclipse java程序调用.so文件?上网查全是在Linux下调.so和在Windows下调.dll文件,跟我的情况不匹配。以下是我的思考与总结。

思路: 这个问题的本质其实在于JNI的缺点—-破坏了Java的跨平台性。虽然Java项目是跨平台的,可以轻易的从Linux移植到Windows,但是C/C++是不跨平台的。.dll文件和.so文件在调用时是需要编译链接的,这就要求系统必须要有相对应的环境,因此是不能在Windows下调.so文件的,也不能在Linux下调.dll文件。因此从理论上来讲,这个问题只有后面讲的两个笨方法,而没有太完美的解决办法(我查到有说用工具可以在Windows下生成.so文件的,但也没有讲清楚能不能运行,如果有更好的办法请大神留言多多指教)。所以解决思路就是要么换开发环境,要么生成对应于.so文件的.dll文件。

解决办法:

将.so文件对应的C/C++源码拿到Windows下编译链接,生成.dll文件,替换原来的.so文件即可。(如果拿不到源码就没办法了)

将开发环境换成Linux下的,这样一定可以成功调用.so文件。

总结: JNI使得Java可以运行本地方法或接口,但也破坏了Java的跨平台性。所以除了以下三种情况外,最好不要用JNI:

项目中的某个部分的算法对效率有着很严的要求,需要使用偏底层的C/C++来提高效率

现有的API不支持项目中的一些环境,需要自己在底层实现

项目很在意资源利用,不愿意跨进程,不愿意增加时间、内存开销

而非必须条件下可以用跨进程(如用TCP/IP来调用本地的函数)或者跨机器(如部署成分布式)来代替JNI.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dll so java 跨平台