JNI API に慣れようとしていますが、サンプルの C++ プログラムをコンパイルすることができません。Linux でコンパイルして実行する同じサンプルを入手しましたが (以下のリンクに質問を投稿した後)、Windows でコンパイルすることはできません。私はmingw g ++を使用しています。すべてのインクルード パスを Windows パスに変更しました。jni.h はコンパイル時に配置されますが、jvm.dll には配置されません。
`JNI_CreateJavaVM' linux への未定義の参照
コンパイルに使用しようとしたコマンドは次のとおりです。
g++ -g -I"C:\Program Files (x86)\Java\jdk1.7.0_21\include" -I"C:\Program Files (x86)\Java\jdk1.7.0_21\include\win32" -L"C:\Program Files (x86)\Java\jdk1.7.0_21\jre\bin\server" callJava.cpp -ljvm
と...
**same as above with the additional** : -L"C:\Program Files (x86)\Java\jdk1.7.0_21\lib"
私が得るエラーは次のとおりです。
undefined reference to `_imp__JNI_CreateJavaVM@12'
そしてコンパイルされているcpp:
#include <jni.h>
int main(){
//firstTest();
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption options[1];
options[0].optionString = "-Djava.class.path=C:/Users/Ron/Dropbox/jni/simple/ctojava/win";
vm_args.version = JNI_VERSION_1_6;
vm_args.options = options;
vm_args.nOptions = 1;
vm_args.ignoreUnrecognized = JNI_FALSE;
int res = JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args);
jclass cls = env->FindClass("Hello");
jmethodID mid = env->GetStaticMethodID(cls, "staticInt", "(I)I");
env->CallStaticVoidMethod(cls, mid,10);
jvm->DestroyJavaVM();
}
多くの例を見てきましたが、まだ解決策が見つかりません。どんな助けでも大歓迎です!
更新: -L"path_to_jvm" を削除するとエラーが発生するため、jvm.dll が配置されていると確信しています。
mingw32/bin/ld.exe: cannot find -ljvm
私が言ったように、この正確なアプローチはLinuxで機能します.Windowsには他に何が欠けていますか?