从Java调用C++函数

Art*_*uro 10 c++ java java-native-interface google-app-engine

我正在开发一个Java应用程序,我需要在其中调用一些C++函数(来自Google Talk库libjingle).目标是在Google App Engine(仅支持Python或Java)上运行它.

我怎样才能做到这一点?

Cos*_*atu 17

您需要native在Java代码中定义要在C++中实现的任何方法,并直接访问本机代码.然后你运行javah你的代码,它将为你生成C头文件,你需要提供C++实现.

您可以像使用任何其他方法一样从Java代码调用本机方法,但它们仍然可以使用C++编写实现并直接与其他任何本机库进行通信.

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

  • 不,他们没有.应用引擎[不支持本机代码或已编译的二进制文件](http://code.google.com/appengine/docs/java/runtime.html#The_Sandbox),通过JNI或其他任何方式.从该链接:"应用程序无法提供或直接调用任何本机JNI代码." asaf上面的评论是在正确的轨道上.你可能想要使用app engine的[内置xmpp api](http://code.google.com/appengine/docs/java/xmpp/). (3认同)

And*_*ron 6

如果磁带库通过DLL有C绑定/ SO,我通常喜欢用写在Java包装Java本机访问(JNA)而不是使用的C/C++编写绑定++ Java本地接口(JNI) .前者更容易操作,因为JNI访问Java对象是一个真正的痛苦.但是,使用该API包装C++类并不明显.

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