在 Java 中包装 C/C++
我用C / C++开发应用程序/程序。我更精通这两种语言,并且喜欢成为一名C++开发人员。我想知道如何创建一个包含我所有C++代码的Java程序。
我的意思是,我想把我所有的C++代码(已经开发)包装在Java类中。但无能为力。
请发布您在Java中集成C++的回复或方法/步骤。(使用JNI是方法,但我无法在www上弄清楚如何使用它)
仅供参考,我使用Eclipse IDE进行开发。
我应该在项目工作空间中包含哪些包?
我用C / C++开发应用程序/程序。我更精通这两种语言,并且喜欢成为一名C++开发人员。我想知道如何创建一个包含我所有C++代码的Java程序。
我的意思是,我想把我所有的C++代码(已经开发)包装在Java类中。但无能为力。
请发布您在Java中集成C++的回复或方法/步骤。(使用JNI是方法,但我无法在www上弄清楚如何使用它)
仅供参考,我使用Eclipse IDE进行开发。
我应该在项目工作空间中包含哪些包?
而不是JNI,或者JNI在SWIG甚至JNA等自动包装器生成器的帮助下,你可以考虑将C / C++和Java分离到单独的进程中,并使用某种形式的IPC和/或Java的抽象来调用用C / C++编写的程序。这种方法放弃了“包装”,所以从某种意义上说,它不是这个问题的答案,但在投票否决之前请继续阅读。我认为,在某些情况下,这是对更广泛问题的合理回答。Process
采用这种方法的原因是,当您直接从 Java 调用 C/C++ 时,JVM 将面临本机代码中出现任何错误的风险。风险在某种程度上取决于有多少本机代码是你的,有多少是你链接到第三方代码(以及你对这种第三方代码的源代码有多少访问权限)。
我遇到了一种情况,我不得不从Java调用C / C++库,并且C / C++库存在导致JVM崩溃的错误。我没有第三方源代码,所以我无法修复本机代码中的错误。最终的解决方案是调用一个单独的C/C++程序,链接到第三方库。然后,Java应用程序在需要调用C /C++内容时调用许多临时的本机进程。
如果本机代码有问题,您可能能够在 Java 中恢复/重试。如果从 JVM 进程包装并调用本机代码,则可能会关闭整个 JVM。
此方法具有性能/资源消耗问题,可能不适合您的应用程序,但在某些情况下值得考虑。
拥有一个单独的应用程序来执行 C/C++ 代码的功能,作为独立的实用程序和测试可能很有用。拥有一些干净的命令行或IPC界面可以简化未来与其他语言的集成。
作为另一种选择,如果您愿意,可以进入本机信号处理,以减轻JVM进程完整性的风险,并坚持使用包装解决方案。
如果要从 Java 调用 C++,则需要使用 JNI - Java 本机接口。
请注意,您失去了垃圾回收器的一些优点,因为它无法处理您的C++对象,并且您的代码将不再可移植。
也许学习编写100%的Java并留下C++会更好,但这只是一个建议。