JNI Learning Notes 要從Java中呼叫第三方C的DLL, cstat.dll,該程式沒有source code無法重新編譯。 因JNI的方式來呼叫的話,C的函數名稱有固定的規則,因為無cstat.dll的原始檔可以修改,因此要用C/C++寫一個中間程式來呼叫cstat.dll。 架構為 Java Class -> intermedia c program -> cstat.dll ( ->代表函數呼叫 ) 產生C header file javah -jni Hello produce Hello.h C compiler Download free cygwin 安裝時要選擇gcc的套件一併安裝,才有gcc可用。 編譯出object file, 要求編譯系統不要使 用 cygwin的DLL gcc -c -I C:/j2sdk1.4.2_13/include -I C:/j2sdk1.4.2_13/include/win32 -mno-cygwin Sample1.c -c 執行編譯 -I 指定jni.h的目錄位置與作業系統相關的header file位置 Build DLL from .o file gcc -shared -o Sample1 .dll Sample1 .o 製作 DLL 時要求編譯系統不要使 用 cygwin 的 DLL gcc -mno-cygwin -shared -o HelloImp.dll HelloImp.o Build DLL directly from .c file gcc -shared -mno-cygwin -I C:/j2sdk1.4.2_13/include -I C:/j2sdk1.4.2_13/include/win32 Arguments.c -o Arguments.dll Final correct command with options gcc -shared -mno-cygwin -Wl,--kill-at -I C:/j2sdk1.4.2_13/include -I C:/j2sdk1.4.2_13/include/win32 Arguments.c -o Arguments.dll -Wl,option 把option傳遞給連接器,如果op...