【问题标题】:What is the easiest way to call a Java method from C++?从 C++ 调用 Java 方法的最简单方法是什么?
【发布时间】:2009-07-10 17:40:20
【问题描述】:

我正在编写一个需要能够读取复杂而深奥的文件类型的 C++ 程序。我已经有一个用于处理这些文件的 Java 程序,其中包括将它们转换为更简单的文件格式的功能。我的想法是,每当我的程序需要从复杂文件中读取信息时,让它调用 Java 方法将其转换为更简单的文件类型,然后将其写入我的程序可以轻松读取的临时文件。这些文件足够小,性能可以接受。我正在用 Qt 编写程序并在 Windows Vista 机器上运行它。

我已经研究过使用 Java 原生接口,但我研究得越多,似乎我应该不惜一切代价避免它。有没有更好的方法来实现这一点,还是我应该继续使用 JNI 方法?

【问题讨论】:

    标签: java c++ java-native-interface


    【解决方案1】:

    您需要多久执行一次此操作?如果不是那么频繁,您可以在那里掏钱去做。只需生成命令行即可。 JNI 可以工作,但是设置起来有点麻烦。设置好后,它应该可以正常工作了。

    【讨论】:

      【解决方案2】:

      为什么不为java算法创建一个可执行的jar呢?

      【讨论】:

        【解决方案3】:

        使用GCJ 将Java 转换为lib 供您链接。

        这可能和 JNI 一样痛苦,但至少您不会再加载或依赖 JRE。

        【讨论】:

          【解决方案4】:

          您可能对SWIG 感兴趣。 "SWIG 是一种软件开发工具,可将用 C 和 C++ 编写的程序与各种高级编程语言连接起来。SWIG 与不同类型的语言一起使用,包括 Perl、PHP、Python、Tcl 和 Ruby 等常见脚本语言"

          【讨论】:

          • OP 似乎想要反过来。不过,SWIG 看起来很有趣。
          【解决方案5】:

          如果GCJ 是您的一个选项,它将允许您将 Java 程序编译为本机代码,该代码可以作为库与您的 C++(再次,特别是 g++)程序链接,以及包含直接 @ 的头文件987654322@ 所有 Java 内容到 C++ 的映射 - 包到命名空间、类到类、方法到成员函数等等。

          【讨论】:

            猜你喜欢
            • 2013-06-24
            • 2018-09-18
            • 1970-01-01
            • 2010-11-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-12-07
            相关资源
            最近更新 更多