ホームページ  >  記事  >  システムチュートリアル  >  Linux で JNI を使用して C/C++ コードを呼び出す方法

Linux で JNI を使用して C/C++ コードを呼び出す方法

PHPz
PHPz転載
2024-02-13 15:30:041016ブラウズ

Java プログラムで C または C の機能を使用することを考えたことはありますか? JNI とは何か、また、JNI を使用すると Linux で言語間プログラミングをどのように実装できるかご存知ですか?これらの質問に興味がある場合は、この記事が最適です。この記事では、JNI の基本概念と、JNI を使用して Linux で C/C コードを呼び出す方法の手順と例を紹介します。

Linux で JNI を使用して C/C++ コードを呼び出す方法

Java クラスを定義する — Hello class

リーリー

ここで注意すべき点が 2 つあります:

最初に: 次のように、ネイティブ キーワードを指定する必要があることを除き、使用するネイティブ メソッドごとにネイティブ メソッド宣言を作成します。 リーリー

2 番目: ローカル コード ライブラリは明示的にロードする必要があります。このライブラリをクラスの静的ブロックにロードする必要があります (クラスがロードされるときに静的ライブラリが呼び出されます)

次に、hello.java を編集して hello.class ファイルを生成します。

ローカル リンク ライブラリの生成

上で定義したクラスの Java ローカル インターフェイス ヘッダー ファイルを生成するには、javah を使用する必要があります。Java コンパイラの javah 関数は、Hello クラスに基づいて必要な宣言を生成します。このコマンドは、Hello.h ファイルを生成します。

生成された Hello.h ファイルの内容は次のとおりです:

リーリー

CPP ファイル Hello.cpp を Hello.h と同じパスに作成します。

内容は次のとおりです:

リーリー

ここには 3 つのパラメータがあります。パラメータの使用法について説明しましょう:

(1) すべての JNI 呼び出しは、JNIEnv * 型のポインターを使用します。通常、この変数は CPP ファイル内で evn として定義され、ローカル メソッドの最初のパラメーターになります。 env ポインタは関数ポインタ テーブルを指し、その中の関数には VC の "->" 演算子を使用して直接アクセスできます。

(2) jobject は、この Java コード内でインスタンス化された Java オブジェクト LocalFunction へのハンドルを指します。これは this ポインタに相当します。
(3) 3 番目のパラメータは、ローカル呼び出しで Java プログラムによって渡されるパラメータです。この例では、String パラメータが 1 つだけあります。文字列パラメータの場合、Java 文字列はネイティブ コードで直接読み取ることができないため、C/C 文字列または Unicode に変換する必要があります。

共有ライブラリをコンパイルして生成します。

GCC を使用する場合は、この Java ネイティブ メソッドのサポート ファイルの場所をコンパイラに指示し、位置に依存しないコードを生成するようにコンパイラに明示的に指示する必要があります。私の環境では、次のプロセスに従ってコンパイルします:

リーリー

Hello.o を生成する

リーリー

libhello.so を生成します (これは、Windows の .dll ファイル接尾辞と同様に、Linux のダイナミック リンク ライブラリのファイル名形式です)

最後に、この共有ファイルのパスをダイナミック リンカーに通知します。

リーリー

ネイティブ メソッドをテストするための簡単な Java プログラムを作成します

次のソース コードを A.java として保存します:

リーリー

javac を使用して A.java をコンパイルし、A.class を生成します

通常の Java プログラムを実行するのと同じように java A を使用すると、画面に Hello world が表示されます。
この記事を通じて、JNI と、JNI を使用して Linux で C/C コードを呼び出す方法について予備的に理解する必要があります。 JNI は、Java プログラムで C/C を活用したり、C/C プログラムで Java を活用したりできる強力かつ柔軟なツールです。もちろん、JNI にはパフォーマンスの低下、メモリ リーク、エラー処理などのいくつかの欠点もあります。したがって、JNI を使用する場合は、コードの正確さとセキュリティを確保するために、いくつかの詳細と仕様に注意を払う必要があります。この記事がお役に立てば幸いです。ご質問やご提案がございましたら、コメント欄にメッセージを残してください。

以上がLinux で JNI を使用して C/C++ コードを呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlxlinux.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。