8
私はJNI APIに慣れようとしていますが、サンプルC++プログラムをコンパイルすることはできません。未定義の `JNI_CreateJavaVM 'linux
私がコンパイルするのに使っているコマンドは以下の通りです。コンパイルしようとしているプログラムです。私が手にエラーがある:
/tmp/cczyqqyL.o: In function `main':
/home/nc/Desktop/jni/simple/ctojava/callJava.cpp:16: undefined reference to `JNI_CreateJavaVM'
コンパイル:
g++ -g -I/usr/lib/jvm/java-7-oracle/include/ -I/usr/lib/jvm/java-7-oracle/include/linux/ -L/usr/bin/java -L/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server/ -ljvm callJava.cpp
C++:
#include <jni.h> /* where everything is defined */
int main(){
JavaVM *jvm; /* denotes a Java VM */
JNIEnv *env; /* pointer to native method interface */
JavaVMInitArgs vm_args;
JavaVMOption options[1];
options[0].optionString = "-Djava.class.path=/home/nc/Desktop/jni/simple/ctojava/";
vm_args.version = JNI_VERSION_1_6;
vm_args.options = options;
vm_args.nOptions = 1;
vm_args.ignoreUnrecognized = JNI_FALSE;
/* Create the Java VM */
int res = JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args); // this is what it can't find
/* invoke the Main.test method using the JNI */
jclass cls = env->FindClass("Hello");
jmethodID mid = env->GetStaticMethodID(cls, "staticInt", "(I)I");
env->CallStaticVoidMethod(cls, mid,10);
/* We are done. */
jvm->DestroyJavaVM();
}
私はこの問題を検索し、私が見つけたが、まだ私が得るすべてのソリューションを試してみました同じエラー...どんな助けも大歓迎です!
EDIT:下記のJoniの答えが動作します(コンパイラによって異なります)。コンパイルされた出力を実行するときに、LD_LIBRARY_PATH = _path_to_your_libjvm.so_を忘れないでください。そうしないと、実行時にそのlibを見つけることができなくなります。
LD_LIBRARY_PATH=/usr/lib/jvm/java-7-oracle/jre/lib/amd64/server ./a.out
これは役立つはず:、これを修正するコマンドラインの最後には、たとえば、それを使用するコンパイル単位の後
-ljvm
を移動するにはhttp://stackoverflow.com/questions/9923495/undefined-reference-shm-open-already-add-lrt-flag-here/9923523#9923523 – hmjd