トップ 技術・仕様 JNI 使い方 JNIの簡単なサンプル

JNIの簡単なサンプル(Hello Worldを表示するプログラム)

このページでは、JNIの簡単な使い方(Hello Worldを表示するプログラム)を紹介しています。

▲記事トップへ

概要

このページでは、 JNI(Java Native Interface)の簡単な使い方を紹介するため、 Hello World(簡単なアプリケーションのサンプル)を作成する情報を掲載しています。

動作環境

以下の環境で動作確認をおこないました。

Nativeメソッドを定義したJavaソース作成

$ vi NativeClass.java
public class NativeClass {
     public native void nativeMethod();
 }

Nativeメソッドを定義したJavaソースのコンパイル

$ export PATH=$PATH:/usr/java/jdk1.7.0_40/bin
$ javac *.java
$ ls
NativeClass.class  NativeClass.java

ヘッダーファイル生成

$ javah -jni NativeClass
$ ls
NativeClass.class  NativeClass.h  NativeClass.java

NativeClass.hの中身は次のようになります。

/* DO NOT EDIT THIS FILE - it is machine generated */
 #include <jni.h>
 /* Header for class NativeClass */

 #ifndef _Included_NativeClass
 #define _Included_NativeClass
 #ifdef __cplusplus
 extern "C" {
 #endif
 /*
  * Class:     NativeClass
  * Method:    nativeMethod
  * Signature: ()V
  */
 JNIEXPORT void JNICALL Java_NativeClass_nativeMethod
   (JNIEnv *, jobject);

 #ifdef __cplusplus
 }
 #endif
 #endif

Nativeメソッドを実装したCコード作成

$ vi NativeClass.java
#include <stdio.h>
 #include "NativeClass.h"

 JNIEXPORT void JNICALL Java_NativeClass_nativeMethod (JNIEnv* env, jobject thisObj) {
     printf("Hello World!!\n");
 }

Nativeメソッドを実装したCコードのコンパイル

$ gcc -I/usr/java/jdk1.7.0_40/include -I/usr/java/jdk1.7.0_40/include/linux -shared  -o libNative.so Native.c
$ ls
libNative.so  Native.c  NativeClass.class  NativeClass.h  NativeClass.java

Nativeメソッドを呼び出すJavaコード作成

$ vi Hello.java
public class Hello {
     public static void main(String[] args) {
         System.loadLibrary("Native");
         NativeClass nativeClass = new NativeClass();
         nativeClass.nativeMethod();
     }
 }

Nativeメソッドを定義したJavaソースのコンパイル

$ javac Hello.java
$ ls
Hello.class  Hello.java  libNative.so  Native.c  NativeClass.class  NativeClass.h  NativeClass.java

プログラムの実行

soファイルが見つかるようにパスを環境変数に追加します。

$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<libNative.soが置かれているディレクトリのパス>

実行します。

$ java Hello
Hello World!!

※「cannot restore segment prot after reloc: Permission denied」などと実行時にエラーが発生する場合は、SELinuxの設定を行います。

# su
# chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t libNative.so
# exit

戻る

スポンサーリンク

サイト内のページ

言語
C・C++ /HTML /Java /JavaScript /PHP /シェルスクリプト

開発環境
Ant /Burp /Eclipse /Fiddler /gcc /gdb /Git /g++ /JDK /JMeter /JUnit /Teraterm /ZAP

技術・仕様
Ajax /CORBA /Jakarta EE(旧称J2EE、Java EE) /JNI

ライブラリ/Framework/CMS
bootstrap /jQuery /FuelPHP /Lucene /MyBatis /Seasar2 /Spring /Struts /WordPress

Web API
Google Maps

ITインフラOSとミドルウェア
Linux /Windows /シェル
ActiveMQ /Tomcat /MariaDB /MySQL /Nagios /Redis /Solr

ITインフラサーバー
公開Webサーバー

ITインフラネットワーク
プログラミング /構築

ITインフラセキュリティ
公開サーバーのセキュリティ

PC製品
ZOTAC

SI
ホームページの作り方

その他
IT用語 /ITスキル体系

スポンサーリンク

関連サイト内検索ツール

zealseedsおよび関連サイト内のページが検索できます。

IPアドレス確認ツール

あなたのグローバルIPアドレスは以下です。

3.145.186.6

HTMLの表示色確認ツール

パスワード生成ツール

文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。

ここに生成されます。

スポンサーリンク