从 C++ 调用 Java 方法的最简单方法是啥?
Posted
技术标签:
【中文标题】从 C++ 调用 Java 方法的最简单方法是啥?【英文标题】: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 方法?
【问题讨论】:
【参考方案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++ 的映射 - 包到命名空间、类到类、方法到成员函数等等。
【讨论】:
以上是关于从 C++ 调用 Java 方法的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 C++ 中从文件末尾读取的最有效方法是啥? (解析文件中的最后 128 位)