14 c++ java eclipse java-native-interface
我用C/C++开发应用程序/程序.我更熟悉这两种语言,喜欢成为C++开发人员.我想知道如何创建一个包含所有C++代码的Java程序.
我的意思是,我想在Java类中包装我所有的C++代码(已经开发).但无能为力如何做到这一点.
请发布您在Java中集成C++的响应或方法/步骤.(使用JNI就是这样,但我无法在www上弄清楚如何使用它)
仅供参考,我使用Eclipse IDE进行开发.
我应该在项目工作区中包含哪些包和哪些包?
Gre*_*tes 15
可以考虑将C/C++和Java分离成单独的进程,并使用某种形式的IPC和/或Java的Process
抽象来调用程序,而不是JNI或JNI,而是使用自动包装生成器(如SWIG,甚至是JNA)提供一些帮助.用C/C++编写.这种方法放弃了"包装",所以在某种意义上它不是这个问题的答案,但请在向下投票之前阅读.我认为,在某些情况下,这是对更广泛问题的合理答案.
这种方法的原因是当您直接从Java调用C/C++时,JVM会面临本机代码中出现任何错误的风险.风险取决于您的本机代码的数量以及您与第三方代码的链接量(以及您对此类第三方代码的源代码的访问权限).
我遇到了一种情况,我不得不从Java调用C/C++库,而C/C++库存在导致JVM崩溃的错误.我没有第三方源代码,所以我无法修复本机代码中的错误.最终的解决方案是调用一个单独的C/C++程序,链接到第三方库.然后,只要需要调用C/C++内容,Java应用程序就会调用许多短暂的本机进程.
如果本机代码有问题,您可以在Java中恢复/重试.如果从JVM进程包装并调用本机代码,则可能会占用整个JVM.
这种方法具有性能/资源消耗的影响,可能不适合您的应用程序,但在某些情况下值得考虑.
拥有一个单独的应用程序来运行C/C++代码的功能可能是一个独立的实用程序和测试.拥有一些干净的命令行或IPC接口可以简化未来与其他语言的集成.
作为另一种选择,如果您愿意并坚持使用包装解决方案,您可以进入本机信号处理以降低JVM进程完整性的风险.
如果要从Java调用C++,则需要使用JNI - Java Native Interface.
请注意,您丢失了垃圾收集器的一些好处,因为它无法处理您的C++对象,并且您的代码将不再可移植.
也许你可以通过学习写100%Java并留下C++来获得更好的服务,但这只是一个建议.
归档时间: |
|
查看次数: |
31955 次 |
最近记录: |