ホームページ > 記事 > システムチュートリアル > Linux で JNI を使用して C/C++ コードを呼び出す方法
Java プログラムで C または C の機能を使用することを考えたことはありますか? JNI とは何か、また、JNI を使用すると Linux で言語間プログラミングをどのように実装できるかご存知ですか?これらの質問に興味がある場合は、この記事が最適です。この記事では、JNI の基本概念と、JNI を使用して Linux で C/C コードを呼び出す方法の手順と例を紹介します。
ここで注意すべき点が 2 つあります:
最初に: 次のように、ネイティブ キーワードを指定する必要があることを除き、使用するネイティブ メソッドごとにネイティブ メソッド宣言を作成します。 リーリー
2 番目: ローカル コード ライブラリは明示的にロードする必要があります。このライブラリをクラスの静的ブロックにロードする必要があります (クラスがロードされるときに静的ライブラリが呼び出されます)次に、hello.java を編集して hello.class ファイルを生成します。
生成された 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 に変換する必要があります。
リーリー
Hello.o を生成するリーリー
libhello.so を生成します (これは、Windows の .dll ファイル接尾辞と同様に、Linux のダイナミック リンク ライブラリのファイル名形式です)最後に、この共有ファイルのパスをダイナミック リンカーに通知します。
リーリー
リーリー
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 サイトの他の関連記事を参照してください。