当前位置: 技术问答>linux和unix
Windows下用C++写的dll如何才能被Linux下的Java调用?
来源: 互联网 发布时间:2016-01-16
本文导语: 一个涉及到双方合作共同开发的项目里遇到了这个问题:对方(服务器端)用的是Linux平台,而我(客户端)用的则是Windows平台。有一部分对数据的验证处理,因为涉及到商业上的机密,所以算法不能向对方公开,只...
一个涉及到双方合作共同开发的项目里遇到了这个问题:对方(服务器端)用的是Linux平台,而我(客户端)用的则是Windows平台。有一部分对数据的验证处理,因为涉及到商业上的机密,所以算法不能向对方公开,只好由对方来调用我方提供的现成东东。因为以前从未做过Linux下的开发工作,心里没底,有几个问题想请教一下大家:
1. 上面说的这种情况,是不是只能由对方来调用我方提供的动态链接库(dll)?还有没有其它更好的解决方式?
2. 用C++标准语言函数(工具VC++ 6.0,不调用任何Win API和MFC)编写的dll是否就能够在Linux下直接被Java所调用(估计是不行:-()?还是必须借助Crywin之类的工具才可以?大家在Linux下做C/C++开发一般用什么工具?
3. 编写跨平台的dll应该注意哪些问题?在Windows和Linux下开发有没有什么大的差异?
1. 上面说的这种情况,是不是只能由对方来调用我方提供的动态链接库(dll)?还有没有其它更好的解决方式?
2. 用C++标准语言函数(工具VC++ 6.0,不调用任何Win API和MFC)编写的dll是否就能够在Linux下直接被Java所调用(估计是不行:-()?还是必须借助Crywin之类的工具才可以?大家在Linux下做C/C++开发一般用什么工具?
3. 编写跨平台的dll应该注意哪些问题?在Windows和Linux下开发有没有什么大的差异?
|
找到一篇文章,可能对这个主题有帮助
http://www.linuxbyte.net/view.php?skin=art&ID=3650
http://www.linuxbyte.net/view.php?skin=art&ID=3650
|
你如果有源程序,你可以提供头文件和编译后资源,这样他就可以链接到具体的应用程序中了,而你也可以保护你的实现。
不过在Linux下的动态库不是DLL你其实只需要把你的提供支持的接口函数进行重新封装和编译(如果算法中用到平台相关的部分可能也要重写)。
当然,在Linux中也是可以调用部分DLL的,但这些DLL的运行不能有系统相关的部分(起码调用模块不能是系统相关的——比如还要调用系统库什么的),你需要自己构造调用机制了,这方面也是有实例的,比如Mplayer项目中很多解码器支持都是通过调用DLL来实现的。
还有一个比较特舒的方法,就是在Linux下采用windows仿真环境来调用DLL,这个也有很多技术方案了。
不过在Linux下的动态库不是DLL你其实只需要把你的提供支持的接口函数进行重新封装和编译(如果算法中用到平台相关的部分可能也要重写)。
当然,在Linux中也是可以调用部分DLL的,但这些DLL的运行不能有系统相关的部分(起码调用模块不能是系统相关的——比如还要调用系统库什么的),你需要自己构造调用机制了,这方面也是有实例的,比如Mplayer项目中很多解码器支持都是通过调用DLL来实现的。
还有一个比较特舒的方法,就是在Linux下采用windows仿真环境来调用DLL,这个也有很多技术方案了。
|
跨平台的程序没那么好弄的,当然用纯java或wxwindows是不错的选择,但这些似乎与某个叫做dll的动态连接库没什么关系。其实你的问题根本就不牵涉到跨平台的问题,你只是需要一对服务端——客户端程序,至于服务端程序和客户端程序是否是同一平台的根本无所谓,否则我们的网页浏览器不都成了跨平台产品了?
|
不管是用什么语言写的DLL,标准C++也好,
但DLL本身与操作系统的规则有关吧?
比如win下的DLL的入口函数为:DLLMain,而Linux下不是这样的吧。
标准C++与平台无关,但其生成的二进制代码还是不能在两个平台下跑的吧,
也不是太懂,只是觉得不可能!
但DLL本身与操作系统的规则有关吧?
比如win下的DLL的入口函数为:DLLMain,而Linux下不是这样的吧。
标准C++与平台无关,但其生成的二进制代码还是不能在两个平台下跑的吧,
也不是太懂,只是觉得不可能!