CからJavaを呼び出す(書きかけ中)

CからJavaを呼び出すのに苦労している。作業途中だがメモしておく。

1.まず、下記コードを記述*1
ここを参考にしました。

#include <jni.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
  JNIEnv *env;
  JavaVM *jvm;
  JNIEnv jni;
  JavaVM vmi;
  JavaVMInitArgs vm_args;
  JavaVMOption options[4];
  printf("beginning execution...?n");

  /*
   * /opt/blackdown-jdk-1.4.2/がJavaのルートディレクトリの場合
   */
  options[0].optionString = (char *)  "-Djava.class.path=.:/opt/blackdown-jdk-1.4.2/jre/lib/rt.jar";
  options[1].optionString = (char *)  "-Djava.compiler=NONE";
  vm_args.version = JNI_VERSION_1_4;
  vm_args.options = options;
  vm_args.nOptions = 2;
  vm_args.ignoreUnrecognized = JNI_FALSE;

  /*
   * JavaVMを初期化,起動する
   * JNIインターフェースへのポインタを返す
   */
  JNI_CreateJavaVM(&jvm,(void **)&env,&vm_args);
  jni = *env;
  vmi = *jvm;

  /*
   * クラスをさがす
   */
  jclass cls = jni->FindClass(env, "Test");
  if (cls == 0) {
    printf("cannot found Test?n");
    exit(1);
  }

  /*
   * Methodをさがす
   * GetStaticMethodIDの引数については後述
   */
  jmethodID mid = jni->GetStaticMethodID(env, cls, "testmethod", "()V");
  if (mid == 0) {
    printf("Could not locate method testmthod with signature ()V");
    exit(1);
  }

  /*
   * 実行
   */
  jni->CallStaticVoidMethod(env, cls, mid, NULL);

  /*
   * VMを終了する
   */
  vmi->DestroyJavaVM(jvm);
  return 0;
}

2.ビルド時に「undefined reference to `_imp__JNI_CreateJavaVM@12'」というエラーが発生した

3.エラーを解消するために、リンカオプションおよびディレクトリ検索オプションに、jvm.libとそこへのパスを指定する。

Cのプロジェクトを選択→右クリック→プロパティ→C/C++ Build→Settings→MinGW C Linkerと辿って指定する。
文字列として認識させるために、ダブルクォーテーション(”)で囲って設定する必要があることに注意する。

4.実行する
実行ファイルが作成されておらず、エラーとなった。
ここで詰まっている。

*1:本プログラムはネット上のブログから拝借した