从Java调用c++函数

Calling C++ functions from Java

本文关键字:函数 c++ 调用 Java      更新时间:2023-10-16

我正在开发一个Java应用程序,我需要调用一些c++函数(从Google Talk库libjingle)。目标是在Google App Engine(只支持Python或Java)上运行。

我该怎么做?

您需要在java代码中定义native方法,以便在c++中实现任何内容,并直接访问本机代码。然后你在你的代码上运行javah,它会为你生成C头文件,你需要提供c++实现。

本机方法可以像其他方法一样从Java代码中调用,但它们的实现仍然是用c++编写的,并且可以直接与任何其他本机库通信。

您需要设置java.library.path系统属性以包含您需要的共享C/c++库:在这种情况下需要google库和您自己的JNI实现库。

如果库通过DLL/SO具有C绑定,我通常更喜欢使用Java本机访问(JNA)在Java中编写包装器,而不是使用Java本机接口(JNI)在C/c++中编写绑定。前者更容易操作,因为JNI对Java对象的访问是一个真正的麻烦。然而,使用该API包装c++类就不那么明显了。

您可能还想查看简化包装器和接口生成器(SWIG)来自动化此过程的一部分!

您不能在App Engine上运行本机代码-只能运行JRE代码。如果无法避免本地代码,你就需要在另一个系统上运行应用程序的这一部分,并从你的app Engine应用程序调用它——或者在本例中使用内置的XMPP API。