JNIノート(GCC 4.4.0コンパイラ)
以下はJNIの練習で自分が書いたもので、初心者が直接以下の文字を見ても理解できないかもしれません.
初心者はまず入門資料を探して参照することをお勧めします.
以下の内容にはいくつかの不正確な点があるかもしれませんが、もし出会ったら指摘してください.ありがとうございます.
----------------------------------------------------------------SEPARATE-LINE----------------------------------------------------------------
環境変数の設定
http://yanchde.gozaru.jp/mingw/wingw_start.html
変な人民元記号¥
http://gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html#Environment-Variables
http://www.mingw.org/wiki/IncludePathHOWTO
GCC 3でのコンパイルでこのようなエラーが発生し続けていますが、MinGWの実行環境に問題がありますか?または関連ファイルがありません
GCCを4.4.0にアップグレードしてからDLLを再コンパイル
jni_を追加md.hへのパス
C_INCLUDE_PATH
DLLのコンパイルに成功しました
CとC++の違い
注意gcc&g++
Java実行時に表示
Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native.
ローカル言語の定義が見つかりません
ネット上で比較的に多いこのような誤りはDLLが探し出せないので、しかしここはDLLを探し当てることができて、方法が探し出せません
長い間迷って、長い間調べて、発見しました
この編 http://dikar.iteye.com/blog/382701文章
生成されたDLLをDependency Walkerで表示
メソッド名はJava_com_live_xscript_altas_demo_lang_jni_ShowMessage_showMessage
@12
正規の名前よりずっと多い
@12'
http://dikar.iteye.com/blog/382701
解決策を提供した
または
そこで最も簡単なJNIプログラムが出てきて、JavaファイルShowMessageが1つしかありません
後のもう一つのプログラムは、NativeプログラムにJavaオブジェクトを渡すのが比較的簡単です.
MyJavaClass.java
UserObjects.java
2つのファイル
ld --help
ldは何をしていますか.
まだ解決していない問題がたくさんある.
nativeメソッド戻り値問題
GetStringUTFcharsなどのメソッドの戻り値タイプは、charのみですか?
次はGCC環境変数です
MinGW
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
LIBRARY_PATH
PATH
問題&解決策
追加
WIN32API_BASE
関連libが見つかりません
libgcc_s_dw 2-1.dll gcc-core-4.4.0-mingw 32-dll
gcc 4.4.0ダウンロードページ(http://sourceforge.net/projects/mingw/files/)
gmp
mpfr
初心者はまず入門資料を探して参照することをお勧めします.
以下の内容にはいくつかの不正確な点があるかもしれませんが、もし出会ったら指摘してください.ありがとうございます.
----------------------------------------------------------------SEPARATE-LINE----------------------------------------------------------------
D:\ws\JNIDemo\bin>javah -jni com.live.xscript.altas.demo.lang.jni.ShowMessage
D:\ws\JNIDemo\bin>gcc -Wall -shared MsgImpl.c -o MsgImpl.dll
jni.h: No such file or directory
環境変数の設定
CPLUS_INCLUDE_PATH
C_INCLUDE_PATH
LIBRARY_PATH
http://yanchde.gozaru.jp/mingw/wingw_start.html
変な人民元記号¥
http://gcc.gnu.org/onlinedocs/cpp/Environment-Variables.html#Environment-Variables
http://www.mingw.org/wiki/IncludePathHOWTO
D:/Program Files/Java/jdk1.5.0/include/jni.h:525: error: syntax error before '*' token
GCC 3でのコンパイルでこのようなエラーが発生し続けていますが、MinGWの実行環境に問題がありますか?または関連ファイルがありません
In file included from MsgImpl.c:3:
com_live_xscript_altas_demo_lang_jni_ShowMessage.h:13: error: syntax error before "void"
com_live_xscript_altas_demo_lang_jni_ShowMessage.h:14: warning: data definition has no type or storage class
MsgImpl.c:5: error: syntax error before "void"
JNIEXPORT void JNICALL
Java_com_live_xscript_altas_demo_lang_jni_ShowMessage_showMessage (JNIEnv*, jobject, jstring);
GCCを4.4.0にアップグレードしてからDLLを再コンパイル
D:\Program Files\Java\jdk1.5.0\include/jni.h:27:20: error: jni_md.h: No such file or directory
jni_を追加md.hへのパス
C_INCLUDE_PATH
%JAVA_HOME%\include\win32
DLLのコンパイルに成功しました
MsgImpl.c:7: error: request for member 'GetStringUTFChars' in something not a st
ructure or union
CとC++の違い
注意gcc&g++
g++ -Wall -shared MsgImpl.c -o MsgImpl.dll
Java実行時に表示
java.lang.UnsatisfiedLinkError
Thrown if the Java Virtual Machine cannot find an appropriate native-language definition of a method declared native.
ローカル言語の定義が見つかりません
Exception in thread "main" java.lang.UnsatisfiedLinkError: showMessage
at com.live.xscript.altas.demo.lang.jni.ShowMessage.showMessage(Native Method)
at com.live.xscript.altas.demo.lang.jni.ShowMessage.main(ShowMessage.java:16)
ネット上で比較的に多いこのような誤りはDLLが探し出せないので、しかしここはDLLを探し当てることができて、方法が探し出せません
長い間迷って、長い間調べて、発見しました
この編 http://dikar.iteye.com/blog/382701文章
生成されたDLLをDependency Walkerで表示
メソッド名はJava_com_live_xscript_altas_demo_lang_jni_ShowMessage_showMessage
@12
正規の名前よりずっと多い
@12'
http://dikar.iteye.com/blog/382701
解決策を提供した
g++ -Wall -Wl,--kill-at -shared ShowMessage.c -o ShowMessage.dll
または
g++ -Wall -Wl,--add-stdcall-alias -shared ShowMessage.c -o ShowMessage.dll
そこで最も簡単なJNIプログラムが出てきて、JavaファイルShowMessageが1つしかありません
後のもう一つのプログラムは、NativeプログラムにJavaオブジェクトを渡すのが比較的簡単です.
MyJavaClass.java
UserObjects.java
2つのファイル
ld --help
ldは何をしていますか.
まだ解決していない問題がたくさんある.
nativeメソッド戻り値問題
GetStringUTFcharsなどのメソッドの戻り値タイプは、charのみですか?
次はGCC環境変数です
g++ --version
g++ (GCC) 4.4.0
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
MinGW
D:\Program Files\ccpp\MinGW
C_INCLUDE_PATH
%JAVA_HOME%\include;%JAVA_HOME%\include\win32;%MINGW%\include;%MINGW%\lib\gcc\mingw32\4.4.0\include;%WIN32API_BASE%\include
CPLUS_INCLUDE_PATH
%MinGW%\lib\gcc\mingw32\4.4.0\include\c++;%MinGW%\lib\gcc\mingw32\4.4.0\include\c++\backward;%C_INCLUDE_PATH%
LIBRARY_PATH
%JAVA_HOME%\lib;%MINGW%\lib;%MinGW%\lib\gcc\mingw32\4.4.0;%WIN32API_BASE%\lib
PATH
%MinGW%\bin;%MinGW%\libexec\gcc\mingw32\4.4.0;%PYTHON_HOME%;%JAVA_HOME%\bin;d:\oracle\product\10.2.0\db_1\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;D:\Program Files\TortoiseSVN\bin;D:\Program Files\md5;%GNU_BASE%\make\bin
問題&解決策
d:/program files/ccpp/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe: cannot find -luser32
collect2: ld returned 1 exit status
追加
WIN32API_BASE
D:\Program Files\ccpp\w32api-3.13
関連libが見つかりません
libgcc_s_dw 2-1.dll gcc-core-4.4.0-mingw 32-dll
gcc 4.4.0ダウンロードページ(http://sourceforge.net/projects/mingw/files/)
gmp
mpfr