我正在为一个java程序在linux中编写一个本机启动器。启动器应该静态加载 libjvm.so 并JNI_CreateJavaVM()
通过函数指针执行函数,因此我可以启动可执行文件而无需先设置LD_LIBRARY_PATH
.
到目前为止我有这个,我已经知道如何编译和链接它,但我正在努力声明函数指针然后执行函数的语法:
JavaVM *jvm;
JNIEnv *env;
JavaVMInitArgs vm_args;
JavaVMOption* options = new JavaVMOption[10];
...
std::string location = "./jre/lib/server/libjvm.so";
void *handle = dlopen ( location.c_str(), RTLD_LAZY );
if ( !handle ) {
printf ( "Unable to load %s, exiting", location.c_str() );
return 0;
}
?? = dlsym ( handle, "JNI_CreateJavaVM" ); //get the function pointer
//This is how I would execute the function if dynamically linking:
//JNI_CreateJavaVM( &jvm, (void**)&env, &vm_args );
?? ( &jvm, (void**)&env, &vm_args ); //Execute the function pointer.
我用什么神奇的词代替??
s 来完成这项工作?我已经尝试过dlsym 文档,但我对 C/C++ 太不熟悉,无法将其转换为我的情况。
谢谢!