2011-09-29 93 views
15

我想从Java调用C++方法。我阅读了关于JNI的知识,但是我没有得到如何获取所有库文件以及在哪里保存它以便从命令行运行程序。如何从Java调用C++?

是否有任何方法从Eclipse本身调用C++方法,因为我正在使用它来运行Java类。

+0

看看这个线程 - http://stackoverflow.com/questions/7212982/jni-unable-to-fix-this-error/7213943#7213943 – adatapost

+0

只是遵循任何JNI的教程,并得到开始 –

+0

[如何使用NDK?从'hello world'app开始](http://stackoverflow.com/questions/4777935/how-to-use-ndk-starting-with-hello-world-app) –

回答

5

如果JNI太复杂,你可以看看JNA。在第一种情况下,您必须创建本机封装代码(使用C或C++)以加入Java和本机(C++/C/...)代码。第二种情况是在运行时完成的(所以你只需要Java代码+配置)。

+0

“JNI”是标准答案。但是,如果JNA满足您的需求 - 很酷! @Fernando Miguelez:很好的建议!感谢你的分享!这是另一个链接:http://www.javaworld.com/javaworld/jw-02-2008/jw-02-opensourcejava-jna.html – paulsm4

6

虽然我以前使用JNI-C++桥接(虽然只有一点点) - 但它可能有点难看。您可能需要考虑使用SWIG来帮助您生成所有杂乱的锅炉板代码。

2

我已经使用JNA之前的简单接口,它很简单和优雅。尽管如此,如果存在复杂的界面,那么最好使用SWIG。

有一些比较SWIG与JNI和JNA的好答案。这个问题虽然被问到了一段时间。

SWIG vs JNI and JNA

1

JNA可以用来代替JNI。

所有你需要的是下载JNA罐子https://github.com/java-native-access/jna#download)应该包含在你的Java项目。

您需要在项目属性中给出C++库的位置。

  • 右键单击项目
  • 运行
  • 在VM选项包括此-Djava.library.path = “C:您的DLL 位置”

访问这个网站的例子,它也有一个Java和C++项目的源代码,以了解它是如何工作的。 (http://blog.mwrobel.eu/how-to-call-dll-methods-from-java/#a_downloads