web-dev-qa-db-ja.com

JavaからC ++を呼び出す方法は?

JavaからC++メソッドを呼び出したいと思いました。 JNIについて読みましたが、すべてのライブラリファイルを取得する方法と、コマンドラインからプログラムを実行するためにそれを保持する場所を取得していません。

Javaクラスを実行するために使用しているため、Eclipse自体からC++メソッドを呼び出す方法はありますか。

26
user970500

私は過去にJNI-C++ブリッジングを使用しましたが(少しだけですが)、少しいかもしれません。 [〜#〜] swig [〜#〜] を使用して、面倒なボイラープレートコードをすべて生成することを検討することをお勧めします。

6

JNIが複雑すぎる場合は、 [〜#〜] jna [〜#〜] をご覧ください。最初のケースでは、Javaとネイティブ(C++/C/...)コードを結合するためのネイティブラッパーコード(CまたはC++))を作成する必要があります。必要なのはJava code + config)のみです。

6

私は以前、シンプルなインターフェースにJNAを使用しましたが、それはシンプルでエレガントでした。ただし、複雑なインターフェイスがある場合は、SWIGを使用することをお勧めします。

SWIGとJNIおよびJNAを比較する良い答えがいくつかあります。しかし、質問が出されてからしばらく経ちました。

SWIG対JNIおよびJNA

3
Arabasta

私はJNR/FFIを使用します https://github.com/jnr/jnr-ffi JNAよりも速く、SWIGよりも簡単であることがわかりました。私が見つけた速度ではJNIに近いですが、エラーが発生しにくいです。

3
Peter Lawrey

JavaCPP- https://github.com/bytedeco/javacpp

Java内のネイティブC++への効率的なアクセスを提供します。内部ではJNIを使​​用しているため、Java SEのすべての実装で動作します。

JNA/JNIよりはるかに簡単

2
Ariel

[〜#〜] jna [〜#〜]はJNIの代わりに使用できます。

必要なのは、JNA jarhttps://github.com/Java-native- access/jna#download)Javaプロジェクト。

プロジェクトプロパティでC++ライブラリの場所を指定する必要があります。

  • プロジェクトを右クリック
  • 実行
  • VMオプションにはこれが含まれます-Djava.library.path = "C:Your dll location"

Javaおよびc ++プロジェクトのソースコードも含まれている例については、このサイトにアクセスして、これがどのように機能するかを確認してください。(http:// blog。 mwrobel.eu/how-to-call-dll-methods-from-Java/#a_downloads

1
Rishabh Mehta
How to call a C/C++ function from Java then you can use
Java Native Interface (JNI), part of the Java platform, is an interface that enables communication 
between Java applications running on a Java Virtual Machine (JVM) and native applications or libraries
written in other programming languages (e.g. C, C++).
you can use some below urls for as examples.
http://malinsky.eu/blog/how-to-call-a-c-function-from-Java/
https://www3.ntu.edu.sg/home/ehchua/programming/Java/JavaNativeInterface.html
0
mkumar0304