JNIについて
JNIを使ったJavaコードの実行ができず困っています.
【Javaのコード】
public class HelloWorldJNI {
static {
System.loadLibrary("HelloWorldJNI");
}
public native void sayHelloWorld();
public static void main(String[] args) {
HelloWorldJNI hello = new HelloWorldJNI();
System.out.println("テスト");
hello.sayHelloWorld();
}
}
【Cのコード】
#include "HelloWorldJNI.h"
int
main(int argc, char * argv[])
{
return 0;
}
JNIEXPORT void JNICALL Java_HelloWorldJNI_sayHelloWorld (JNIEnv *env, jobject obj ) {
printf("Hello JNI World\n");
return;
}
【Cのコンパイラ】
Microsoft Platform SDK for Windows Server 2003で,
WindowsXP x64 Buid Environmentを使って,↓のようなバッチファイルを
実行しています.
(OSは,WindowsXPのx64edition SP2です.)
コンパイル・リンク中にエラーは出ません.
【ビルド】
echo off
set JNI="C:\Program Files\Java\jdk1.6.0_07\include"
set JNI1=%JNI%\win32
set OUTPUTDIR=.
cl /nologo /c /I%JNI% /I%JNI1% /I. /LD /Zi /Od HelloWorldJNI.c
LINK /nologo /NODEFAULTLIB /OPT:NOREF /out:HelloWorldJNI.dll HelloWorldJNI.obj bufferoverflowu.lib oldnames.lib kernel32.lib user32.lib netapi32.lib advapi32.lib gdi32.lib comdlg32.lib comctl32.lib wsock32.lib libcmtd.lib
【実行結果】
↓こんなエラーになります.
C:\WORK\>"C:\Program Files\Java\jre1.6.0_07\bin\java.ex
e" HelloWorldJNI
テスト
#
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x000000000001c0e8, pid=3864, t
id=2528
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (10.0-b23 mixed mode windows-amd64)
# Problematic frame:
# C 0x000000000001c0e8
#
# An error report file with more information is saved as:
# C:\work\hs_err_pid3864.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
【質問】
原因となっていることや確認すべきことをご指摘頂ける方,
いらっしゃいませんでしょうか.