日期:2014-05-20  浏览次数:20765 次

Windows下用C++写的dll如何才能被Linux下的Java调用?
一个涉及到双方合作共同开发的项目里遇到了这个问题:对方(服务器端)用的是Linux平台,而我(客户端)用的则是Windows平台。有一部分对数据的验证处理,因为涉及到商业上的机密,所以算法不能向对方公开,只好由对方来调用我方提供的现成东东。因为以前从未做过Linux下的开发工作,心里没底,有几个问题想请教一下大家:
1.Linux下Java怎样来调用C++封装好的东东?也是调dll吗?
2.上面说的这种情况,是不是只能由对方来调用我方提供的动态链接库(dll)?还有没有其它更好的解决方式?
3.用C++标准语言函数(工具VC++   6.0,不调用任何Win   API和MFC)编写的dll是否就能够在Linux下直接被Java所调用(估计是不行:-()?还是必须借助Crywin之类的工具才可以?大家在Linux下做C/C++开发一般用什么工具?
4.编写跨平台的dll应该注意哪些问题?在Windows和Linux下开发有没有什么大的差异?

------解决方案--------------------
JNI
直接调用就可以啦,好像没有什么差异。
我们开发中DLL都是在WIN下开发,然后部署到LINUX上运行,没有发现有什么不拖得。

------解决方案--------------------
DLL是二进制文件,两个完全不同的操作系统怎么能够做到二进制兼容呢?Liux下有自己的动态库。
所以结论是肯定不行。
可以考虑用TCP通讯的方式来调用。
------解决方案--------------------
dll不能在linux上用,你可以生成.so这个格式的才能在linux上用

window 上的dll就是linux上的.so的格式
------解决方案--------------------
dll在LINUX下是跑不起来的,.SO可以
------解决方案--------------------
是对方调用你们WIN下开发的DLL哦,

你给他们提供一个就java的API呀,然后对方通过JNI技术调用你们的java API
------解决方案--------------------
如果C++够水准, 使用一些标准些通用些的库,例如ACE,STL,win和linux都能用的话,
linux下的是能调了, 当然了win下编译后的是dll了,LINUX也可能就是上面说的SO,或LIB之类的

------解决方案--------------------
> 用C++标准语言函数(工具VC++ 6.0,不调用任何Win API和MFC)编写的dll
> 是否就能够在Linux下直接被Java所调用(估计是不行:-()?还是必须借助
> Crywin之类的工具才可以?大家在Linux下做C/C++开发一般用什么工具?

我看你还是自己装一个 Linux 作为开发环境得了。既然你的程序很“干净”,没调用任何 Win API 什么的,移植应该不是大问题。在 Linux 下搭一个编译环境也不是什么难事儿,几乎是“零成本”的。Cygwin 恐怕不行吧……我总觉得它虽然是 Linux 的操作界面,但编译出来的东西好像还是 Windows 的 PE 格式的……这个不太有把握。
------解决方案--------------------
如楼上那些所说,你要很多重复投入DLL的工作,很不划算。

不知你有没有做过对象的持久化?建议你用JNI在本地调用,然后利用对象的持久化序列化对象通过TCP通信,把对象传给Linux。

这样的点麻烦,但不会让你重复投入。