JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > JNI編  
メニュー
Home
情報交換掲示板
ツールの部屋
Java関連の書籍
アプリケーション編
Swing編
Swing(イベント)編
Swing(Look&Feel)編
アプレット編
iアプリ編
サーブレット編
サーブレット(Linux)編
サーブレット(web.xml)編
サーブレット(セッション)編
サーブレット(クッキー)編
サーブレット(フィルタ)編
JSP編
JSP(ディレクティブ)編
JSP(アクション)編
JSP(スクリプト)編
JSP(オブジェクト)編
JSP(カスタムタグ)編
JSP(データベース)編
Apache + Tomcat編
Struts編
JDBC編
JDBC(データソース)編
JDBC(MySQL)編
JDBC(PostgreSQL)編
JDBC(トランザクション)編
JavaMail(SMTP)編
JavaMail(POP)編
JNI編
RMI編
RMI(アプレット)編
CORBA編
JNDI編
EJB編
EJB(Entity Bean)編
JMS(PTP)編
JMS(Pub/Sub)編
XML(SAX)編
XML(DOM)編
XSLT編
SOAP編
国際化編
国際化(タイムゾーン)編
国際化(通貨)編
リフレクション編
コレクション編
コレクション(Set)編
コレクション(List)編
コレクション(Map)編
スレッド編
正規表現編
アサーション編
ログ機能編
サウンド編
ファイル入出力編
URL編
ソケット編
データグラム編
HTTP
FTP編
jar編
javadoc編
Ant編
外部コマンド編
プロパティファイル編
システムプロパティ編
Eclipse編
  2002/02/03  田中宏和
Last Update 2002/12/01
JNI編
◆JNIとは?
 JNIJava Native Interfaceの略です。Javaのプログラムから他の言語(C言語やC++言語など)で開発されたネイティブコードのプログラムを利用するためのAPIです。
◆ここでの環境
OS Windows 2000(Windows)
RedHat Linux 7.3(Linux)
J2SE SDK 1.4.1_01
Cコンパイラ Borland C++ コンパイラー 5.5(Windows)
gcc 2.96-110(Linux)
◆Java実行環境の構築
アプリケーション編を参考にしてJavaの実行環境を構築してください。
◆コンパイラの用意

<Windowsの場合>

ここではフリーのBorland C++ コンパイラー 5.5を使用します。
■コンパイラのダウンロード
BorlandからC/C++言語のコンパイラをダウンロードします。
Borland C++ コンパイラ 5.5のダウンロード
■コンパイラのインストール
ダウンロードしたファイルを実行してインストールします。
■環境変数PATHの設定
C:\borland\bcc55\Binを環境変数PATHに追加してください。環境変数の設定方法はアプリケーション編を参考にしてください。
■bcc32.cfgファイルの作成
以下の内容でC:\borland\bcc55\Bin\bcc32.cfgファイルを作成します。
bcc32.cfg
-IC:\borland\bcc55\Include
-LC:\borland\bcc55\lib

<Linuxの場合>
gccを使用します。インストールされていない場合はインストールCDもしくはhttp://gcc.gnu.org/からダウンロードしてインストールしてください。
 
◆Javaソースコード
HelloWorldJNI.java(ここからダウンロード)
public class HelloWorldJNI {
  static {
    // ライブラリをロードします
    System.loadLibrary("HelloWorldJNI");
  }
  // ネイティブメソッドを宣言します
  public native String sayHelloWorld();

  public static void main(String[] args) {
    HelloWorldJNI hello = new HelloWorldJNI();
    // メソッドを実行して表示します
    System.out.println(hello.sayHelloWorld());
  }
}
 
◆Javaソースコードのコンパイル
<Windowsの場合>
コマンドプロンプト
C:\JavaHello\JNI>javac HelloWorldJNI.java

C:\JavaHello\JNI>

<Linuxの場合>
Windowsの場合と同じです。
 
◆C++言語のヘッダーファイルの生成
ヘッダーファイルは以下のようにjavahというコマンドで生成できます。オプションには-jniを指定し、引数には上でコンパイルしたクラスの拡張子を除いたものを指定します。
<Windowsの場合>
コマンドプロンプト
C:\JavaHello\JNI>javah -jni HelloWorldJNI

C:\JavaHello\JNI>

<Linuxの場合>
Windowsの場合と同じです。
これで、HelloWorldJNI.hというヘッダーファイルが生成されました。以下がそのファイルです。
HelloWorldJNI.h(ここからダウンロード)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include 
/* Header for class HelloWorldJNI */

#ifndef _Included_HelloWorldJNI
#define _Included_HelloWorldJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorldJNI
 * Method:    sayHelloWorld
 * Signature: ()Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_HelloWorldJNI_sayHelloWorld
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif 
 
◆C++言語のソースファイルの作成
次にC++言語のソースファイルを作ります。以下がそのコードです。
HelloWorldJNI.cpp(ここからダウンロード)
#include "HelloWorldJNI.h"
JNIEXPORT jstring JNICALL 
             Java_HelloWorldJNI_sayHelloWorld (JNIEnv *env, 
                                               jobject obj ) {
    return env->NewStringUTF("Hello World");
}
ソースファイルができましたら次にコンパイルしてDLLファイルを作ります。
◆C++言語のソースのコンパイルとDLLの生成
<Windowsの場合>
ここでは上でインストールしたbcc32というコンパイラを使用します。
コマンドプロンプト
C:\JavaHello\JNI>bcc32 -IC:\j2sdk1.4.1_01\include -IC:\j2sdk1.4.1_01\include\win32 -tWD HelloWorldJNI.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
HelloWorldJNI.cpp:
警告 W8057 HelloWorldJNI.cpp 7: パラメータ 'obj' は一度も使用されない(関数 __std
call Java_HelloWorldJNI_sayHelloWorld(JNIEnv_ *,_jobject *) )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

C:\JavaHello\JNI>

これで、HelloWorldJNI.dllというダイナミックリンクライブラリが作成されました。
 <Linuxの場合>
Linuxの場合、C++言語のソースをコンパイルするにはgccを使用します。
Linux コンソール
[tanaka@redhat JNI]$ gcc -shared -I/usr/java/j2sdk1.4.1_01/include/ -I/usr/java/j2sdk1.4.1_01/include/linux/ HelloWorldJNI.cpp -o libHelloWorldJNI.so
[tanaka@redhat JNI]$
これでlibHelloWorldJNI.soというダイナミックリンクライブラリが作成されました。
(メモ)
Linuxの場合はダイナミックリンクライブラリのファイルの名前の先頭にlibとつけなければなりません。
 
◆Javaのプログラムの実行
■実行に必要なファイル
HelloWorldJNI.class メインとなるJavaのクラス
HelloWorldJNI.dll (Windows)
libHelloWorldJNI.so (Linux)
Javaのプログラムから利用される
ダイナミックリンクライブラリ
さっそく実行してみましょう。
<Windowsの場合>
コマンドプロンプト
C:\JavaHello\JNI>java HelloWorldJNI
Hello World

C:\JavaHello\JNI>

おおおお!表示されましたね!
 
<Linuxの場合>
■環境変数LD_LIBRARY_PATHの設定
Linuxの場合環境変数LD_LIBRARY_PATHを設定しなければなりません。libHelloWorldJNI.soファイルがあるディレクトリを指定します。ここではカレントディレクトリなので以下のようになります。
Linux コンソール
[tanaka@redhat JNI]$ export LD_LIBRARY_PATH=.
[tanaka@redhat JNI]$
■実行
Linux コンソール
[tanaka@redhat JNI]$ java HelloWorldJNI
Hello World
[tanaka@redhat JNI]$
おおおお!表示されましたね!
 
■書籍
Java関連の書籍

 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME