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.
思路: 这个问题的本质其实在于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.
相关文章推荐
- Windows环境下教你用Eclipse ADT 插件生成.h/.so文件,Java下调用JNI,轻松学习JNI
- Windows环境下教你用Eclipse ADT 插件生成.h/.so文件,Java下调用JNI,轻松学习JNI
- Windows环境下教你用Eclipse ADT 插件生成.h/.so文件,Java下调用JNI,轻松学习JNI
- 使用JSmooth将java程序转换成windows上的.exe文件(彻底解决相对目录问题)
- JNI 使用总结 (JAVA 调用C语言编写的DLL/SO/SL文件)
- windows可执行文件调用jar包执行java程序-toolsRun.bat
- 【转载整理】eclipse 开发c/c++、Java使用JNI调用C程序、生成64位dll动态链接库
- Eclipse下NDK开发(java调用so文件)
- windows下使用批处理文件调用python程序
- 小白Windows下编译使用Android NDK,调用SO文件
- 如何使用matalb中的deploytool函数打包jar包嵌入eclipse供java程序调用
- 使用.bat文件在Windows下运行Java程序时怎样避免DOS窗口
- JAVA 使用Jacob调用windows的Sapi实现文本转语音文件
- Windows做共享存储mount到Linux系统使用ftp工具上传与使用java程序上传文件
- Windows下编译使用Android NDK,调用SO文件
- Chap5:使用JNI技术实现java程序调用第三方dll(c/c++)文件的功能
- Eclipse下NDK开发(java调用so文件)
- eclipse中使用java程序调用webservice的总结
- Eclipse下NDK开发(java调用so文件)
- 使用.bat文件在Windows下运行Java程序时怎样避免DOS窗口