Jun 19, 2002
onlsun1, SPARCstation 20 システムでのJNIの実行
--- hello world実行#1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(http://www-online.kek.jp/~inoue/para-CAMAC/
Test/Hello-JNI.html)
高エネルギー加速器研究機構
素粒子原子核研究所
物理、オンライングループ
井上 栄二
(1). 現状確認
(A). onlsun1にjava version "1.4.0-b92" がインストールされている。
(2). ここでやるべきこと
onlsun1のマシン上でJNIでのhello world を実行する。
(3). コンパイル
(3-1). Javaのチェック
onlsun1[212]% java -version
java version "1.4.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.0-b92)
Java HotSpot(TM) Client VM (build 1.4.0-b92, mixed mode)
onlsun1[213]%
(3-2). 実行環境
onlsun1[213]% env
HOME=/export/home/onlsun1/inoue
PATH=/opt/NSCPnav/bin:/home5/ORBacus4.1.1/JOB-4.1.1/bin:/usr/java/bin:/usr/java/jre/bin:/usr/horb13b4a/horb/bin:/usr/horb202:/usr/java/bin:/usr/java/jre/bin:/usr/java1.4.0/j2sdk1.4.0/bin:/usr/java1.4.0/j2sdk1.4.0/jre/bin:/export/home/onlsun1/inoue/HORB/horb21b2/bin:/home2/opt/gimp/bin:/export/home/onlsun1/inoue/FastEther/X1059A/TTCP/ttcp:/opt/Acrobat4/bin:/opt/sfw/bin:/usr/local/bin:/home3/opt_ext/LBLxfig/bin:/net/fs/public/solaris_licensed/forte6/sparc/SUNWspro/bin:/kek/compilers/ws5.0/SUNWspro/bin:/kek/compilers/volume5/SUNWspro/bin:/kek/compilers/volume4/SUNWspro/bin:/kek/SUNWspro/bin:/usr/sbin:/usr/ccs/bin:/export/home/onlsun1/inoue/bin:/home3/NSUG93/X11R5/bin:/usr/dt/bin:/bin:/usr/bin:/usr/ucb:/etc:.:/usr/openwin/bin:/kek/local/bin:/kek/cern/97a/bin:/home1/cern/95a/bin
LOGNAME=inoue
HZ=100
TERM=dtterm
TZ=Japan
SHELL=/bin/csh
MAIL=/var/mail/inoue
LANG=ja
PWD=/export/home/onlsun1/inoue/JNI
USER=inoue
LD_LIBRARY_PATH=/home5/ORBacus4.1.1/JOB-4.1.1/lib:/usr/horb13b4a/horb/lib:/usr/java/lib:/usr/java/jre/lib:/usr/horb202:/export/home/onlsun1/inoue/HORB/horb202:/usr/java1.4.0/j2sdk1.4.0/jre/lib/sparc:/usr/java1.4.0/j2sdk1.4.0/jre/lib:/usr/java1.4.0/j2sdk1.4.0/lib:/export/home/onlsun1/inoue/HORB/horb21b2:/net/fs/public/solaris_licensed/forte6/sparc/SUNWspro/lib:/kek/compilers/ws5.0/SUNWspro/lib:/kek/compilers/volume5/SUNWspro/lib:/kek/compilers/volume4/SUNWspro/lib:/kek/SUNWspro/lib:/opt/sfw/lib:/home3/NSUG93/X11R5/lib
LD_RUN_PATH=/usr/horb13b4a/horb/lib:/usr/JOB-4.1.1/lib:/usr/java/jre/lib:/usr/horb202:/export/home/onlsun1/inoue/HORB/horb202:/usr/java1.4.0/j2sdk1.4.0/jre/lib/sparc:/usr/java1.4.0/j2sdk1.4.0/jre/lib:/usr/java1.4.0/j2sdk1.4.0/lib:/export/home/onlsun1/inoue/HORB/horb21b2:/net/fs/public/solaris_licensed/forte6/sparc/SUNWspro/lib:/kek/compilers/ws5.0/SUNWspro/lib:/opt/gtk/lib:/home2/opt/gimp/lib:/opt/sfw/lib:/home3/NSUG93/X11R5/lib:/usr/X11R6.1/lib:/usr/local/lib
MANPATH=/net/fs/public/solaris_licensed/forte6/sparc/SUNWspro/man:/kek/compilers/ws5.0/SUNWspro/man/:/kek/compilers/volume5/SUNWspro/man:/usr/openwin/man:/usr/man:/usr/dt/man:/usr/local/man:/kek/compilers/volume4/SUNWspro/man:/kek/SUNWspro/man:/opt/sfw/man
NNTPSERVER=keknews
ORBACUS_LICENSE=/home5/ORBacus4.1.1/JOB-4.1.1/licenses_job.txt
LESS=-c -h0
DISPLAY=onlsun2:0
CLASSPATH=.
onlsun1[214]%
(3-3). Javaコードを書く
この実行で使用するソースコードは、以下のURLから入手した。
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/jni/index.html
nlsun1[234]% cat HelloWorld.java
class HelloWorld {
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
onlsun1[235]%
(3-4). Javaコードをコンパイルする
onlsun1[237]% ls -l
合計 4
-rw-r--r-- 1 inoue kek 224 6月 19日 10:51 HelloWorld.java
drwxr-xr-x 2 inoue kek 512 6月 19日 10:46 example1/
onlsun1[238]% javac HelloWorld.java
onlsun1[239]% ls -l
合計 6
-rw-r--r-- 1 inoue kek 462 6月 19日 10:59 HelloWorld.class
-rw-r--r-- 1 inoue kek 224 6月 19日 10:51 HelloWorld.java
drwxr-xr-x 2 inoue kek 512 6月 19日 10:46 example1/
onlsun1[240]%
(3-5). .hファイルの生成
C++言語のヘッダーファイルは、以下のようにjavahというコマンドで生成
できる。 オプションには-jniを指定し、引数には項目(3-4)でコンパイルした
クラスの拡張子を除いたものを指定する。
onlsun1[240]% javah -jni HelloWorld
onlsun1[241]% ls -l
合計 8
-rw-r--r-- 1 inoue kek 462 6月 19日 10:59 HelloWorld.class
-rw-r--r-- 1 inoue kek 401 6月 19日 11:08 HelloWorld.h
-rw-r--r-- 1 inoue kek 224 6月 19日 10:51 HelloWorld.java
drwxr-xr-x 2 inoue kek 512 6月 19日 10:46 example1/
onlsun1[242]% cat HelloWorld.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
onlsun1[243]%
(3-6). C言語のソースファイルの作成
onlsun1[252]% cat HelloWorldImp.c
#include
#include "HelloWorld.h"
#include
JNIEXPORT void JNICALL
Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
onlsun1[253]%
(3-7). C言語のソースファイルをコンパイルしてシェアード・ライブラリを作成
onlsun1[173]% pwd
/export/home/onlsun1/inoue/JNI
onlsun1[174]% ls -l
合計 10
-rw-r--r-- 1 inoue kek 462 6月 19日 10:59 HelloWorld.class
-rw-r--r-- 1 inoue kek 401 6月 19日 11:08 HelloWorld.h
-rw-r--r-- 1 inoue kek 224 6月 19日 10:51 HelloWorld.java
-rw-r--r-- 1 inoue kek 192 6月 19日 11:31 HelloWorldImp.c
drwxr-xr-x 2 inoue kek 512 6月 19日 10:46 example1/
onlsun1[175]% cc -G -I/usr/java/include -I/usr/java/include/solaris HelloWorldImp.c -o libhello.so
onlsun1[176]% ls -l
合計 22
-rw-r--r-- 1 inoue kek 462 6月 19日 10:59 HelloWorld.class
-rw-r--r-- 1 inoue kek 401 6月 19日 11:08 HelloWorld.h
-rw-r--r-- 1 inoue kek 224 6月 19日 10:51 HelloWorld.java
-rw-r--r-- 1 inoue kek 192 6月 19日 11:31 HelloWorldImp.c
drwxr-xr-x 2 inoue kek 512 6月 19日 10:46 example1/
-rwxr-xr-x 1 inoue kek 5412 6月 19日 13:24 libhello.so*
onlsun1[177]%
(3-8). プログラムの実行
onlsun1[188]% pwd
/export/home/onlsun1/inoue/JNI
onlsun1[189]% ls -l
合計 22
-rw-r--r-- 1 inoue kek 462 6月 19日 10:59 HelloWorld.class
-rw-r--r-- 1 inoue kek 401 6月 19日 11:08 HelloWorld.h
-rw-r--r-- 1 inoue kek 224 6月 19日 10:51 HelloWorld.java
-rw-r--r-- 1 inoue kek 192 6月 19日 11:31 HelloWorldImp.c
drwxr-xr-x 2 inoue kek 512 6月 19日 10:46 example1/
-rwxr-xr-x 1 inoue kek 5412 6月 19日 13:24 libhello.so*
onlsun1[190]% java HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1410)
at java.lang.Runtime.loadLibrary0(Runtime.java:772)
at java.lang.System.loadLibrary(System.java:832)
at HelloWorld.(HelloWorld.java:5)
onlsun1[191]%
ライブラリpathが正しくセットされていない。
onlsun1[191]% env
MANPATH=/net/fs/public/solaris_licensed/forte6/sparc/SUNWspro/man:/kek/compilers/ws5.0/SUNWspro/man/:/kek/compilers/volume5/SUNWspro/man:/usr/openwin/man:/usr/man:/usr/dt/man:/usr/local/man:/kek/compilers/volume4/SUNWspro/man:/kek/SUNWspro/man:/opt/sfw/man
DTDATABASESEARCHPATH=/export/home/onlsun1/inoue/.dt/types,/etc/dt/appconfig/types/%L,/usr/dt/appconfig/types/%L,/usr/dt/appconfig/types/C
DTXSERVERLOCATION=local
LANG=ja
HELPPATH=/usr/openwin/lib/locale:/usr/openwin/lib/help
DTSOURCEPROFILE=true
PATH=/opt/NSCPnav/bin:/home5/ORBacus4.1.1/Java/bin:/usr/java/bin:/usr/java/jre/bin:/usr/horb13b4a/horb/bin:/usr/horb202:/usr/java/bin:/usr/java/jre/bin:/usr/java1.4.0/j2sdk1.4.0/bin:/usr/java1.4.0/j2sdk1.4.0/jre/bin:/export/home/onlsun1/inoue/HORB/horb21b2/bin:/home2/opt/gimp/bin:/export/home/onlsun1/inoue/FastEther/X1059A/TTCP/ttcp:/opt/Acrobat4/bin:/opt/sfw/bin:/usr/local/bin:/home3/opt_ext/LBLxfig/bin:/net/fs/public/solaris_licensed/forte6/sparc/SUNWspro/bin:/kek/compilers/ws5.0/SUNWspro/bin:/kek/compilers/volume5/SUNWspro/bin:/kek/compilers/volume4/SUNWspro/bin:/kek/SUNWspro/bin:/usr/sbin:/usr/ccs/bin:/export/home/onlsun1/inoue/bin:/home3/NSUG93/X11R5/bin:/usr/dt/bin:/bin:/usr/bin:/usr/ucb:/etc:.:/usr/openwin/bin:/kek/local/bin:/kek/cern/97a/bin:/home1/cern/95a/bin
AB_CARDCATALOG=/usr/dt/share/answerbooks/ja/ab_cardcatalog
DTUSERSESSION=inoue-onlsun1-0
XMICONBMSEARCHPATH=/export/home/onlsun1/inoue/.dt/icons/%B%M.bm:/export/home/onlsun1/inoue/.dt/icons/%B%M.pm:/export/home/onlsun1/inoue/.dt/icons/%B:/usr/dt/appconfig/icons/%L/%B%M.bm:/usr/dt/appconfig/icons/%L/%B%M.pm:/usr/dt/appconfig/icons/%L/%B:/usr/dt/appconfig/icons/C/%B%M.bm:/usr/dt/appconfig/icons/C/%B%M.pm:/usr/dt/appconfig/icons/C/%B
SESSION_SVR=onlsun1
OPENWINHOME=/usr/openwin
EDITOR=/usr/dt/bin/dtpad
LOGNAME=inoue
DTSCREENSAVERLIST=StartDtscreenSwarm StartDtscreenQix StartDtscreenFlame StartDtscreenHop StartDtscreenImage StartDtscreenLife StartDtscreenRotor StartDtscreenPyro StartDtscreenWorm StartDtscreenBlank
MAIL=/var/mail/inoue
USER=inoue
DISPLAY=:0.0
SHELL=/bin/csh
DTAPPSEARCHPATH=/export/home/onlsun1/inoue/.dt/appmanager:/etc/dt/appconfig/appmanager/%L:/etc/dt/appconfig/appmanager/C:/usr/dt/appconfig/appmanager/%L:/usr/dt/appconfig/appmanager/C
HOME=/export/home/onlsun1/inoue
XFILESEARCHPATH=/usr/openwin/lib/locale/%L/%T/%N%S:/usr/openwin/lib/%T/%N%S
XMICONSEARCHPATH=/export/home/onlsun1/inoue/.dt/icons/%B%M.pm:/export/home/onlsun1/inoue/.dt/icons/%B%M.bm:/export/home/onlsun1/inoue/.dt/icons/%B:/usr/dt/appconfig/icons/%L/%B%M.pm:/usr/dt/appconfig/icons/%L/%B%M.bm:/usr/dt/appconfig/icons/%L/%B:/usr/dt/appconfig/icons/C/%B%M.pm:/usr/dt/appconfig/icons/C/%B%M.bm:/usr/dt/appconfig/icons/C/%B
TERM=dtterm
dtstart_sessionlogfile=/dev/null
TZ=Japan
DTHELPSEARCHPATH=/export/home/onlsun1/inoue/.dt/help/inoue-onlsun1-0/%H:/export/home/onlsun1/inoue/.dt/help/inoue-onlsun1-0/%H.sdl:/export/home/onlsun1/inoue/.dt/help/inoue-onlsun1-0/%H.hv:/export/home/onlsun1/inoue/.dt/help/%H:/export/home/onlsun1/inoue/.dt/help/%H.sdl:/export/home/onlsun1/inoue/.dt/help/%H.hv:/usr/dt/appconfig/help/%L/%H:/usr/dt/appconfig/help/%L/%H.sdl:/usr/dt/appconfig/help/%L/%H.hv:/usr/dt/appconfig/help/C/%H:/usr/dt/appconfig/help/C/%H.sdl:/usr/dt/appconfig/help/C/%H.hv
XMBINDDIR=/usr/dt/lib/bindings
LD_LIBRARY_PATH=/home5/ORBacus4.1.1/Java/lib:/usr/horb13b4a/horb/lib:/usr/java/lib:/usr/java/jre/lib:/usr/horb202:/export/home/onlsun1/inoue/HORB/horb202:/usr/java1.4.0/j2sdk1.4.0/jre/lib/sparc:/usr/java1.4.0/j2sdk1.4.0/jre/lib:/usr/java1.4.0/j2sdk1.4.0/lib:/export/home/onlsun1/inoue/HORB/horb21b2:/net/fs/public/solaris_licensed/forte6/sparc/SUNWspro/lib:/kek/compilers/ws5.0/SUNWspro/lib:/kek/compilers/volume5/SUNWspro/lib:/kek/compilers/volume4/SUNWspro/lib:/kek/SUNWspro/lib:/opt/sfw/lib:/home3/NSUG93/X11R5/lib
LD_RUN_PATH=/usr/horb13b4a/horb/lib:/usr/java/lib:/usr/java/jre/lib:/usr/horb202:/export/home/onlsun1/inoue/HORB/horb202:/usr/java1.4.0/j2sdk1.4.0/jre/lib/sparc:/usr/java1.4.0/j2sdk1.4.0/jre/lib:/usr/java1.4.0/j2sdk1.4.0/lib:/export/home/onlsun1/inoue/HORB/horb21b2:/net/fs/public/solaris_licensed/forte6/sparc/SUNWspro/lib:/kek/compilers/ws5.0/SUNWspro/lib:/opt/gtk/lib:/home2/opt/gimp/lib:/opt/sfw/lib:/home3/NSUG93/X11R5/lib:/usr/X11R6.1/lib:/usr/local/lib
NNTPSERVER=keknews
ORBACUS_LICENSE=/home5/ORBacus4.1.1/Java/licenses_job.txt
LESS=-c -h0
WINDOWID=37748749
TERMINAL_EMULATOR=dtterm
PWD=/export/home/onlsun1/inoue/JNI
onlsun1[192]%
onlsun1[192]% setenv LD_LIBRARY_PATH .:$LD_LIBRARY_PATH
onlsun1[193]%
onlsun1[193]% env
:
LD_LIBRARY_PATH=.:/home5/ORBacus4.1.1/JOB-4.1.1/lib:/usr/horb13b4a/horb/lib:/usr/java/lib:/usr/java/jre/lib:/usr/horb202:/export/home/onlsun1/inoue/HORB/horb202:/usr/java1.4.0/j2sdk1.4.0/jre/lib/sparc:/usr/java1.4.0/j2sdk1.4.0/jre/lib:/usr/java1.4.0/j2sdk1.4.0/lib:/export/home/onlsun1/inoue/HORB/horb21b2:/net/fs/public/solaris_licensed/forte6/sparc/SUNWspro/lib:/kek/compilers/ws5.0/SUNWspro/lib:/kek/compilers/volume5/SUNWspro/lib:/kek/compilers/volume4/SUNWspro/lib:/kek/SUNWspro/lib:/opt/sfw/lib:/home3/NSUG93/X11R5/lib
:
onlsun1[194]%
onlsun1[194]% java HelloWorld
Hello world!
onlsun1[195]%
ok. JNIによる Hello World は正常に実行できた。
---xxxx