您好我已尝试从C ++代码创建JVM实例:
#include <jni.h>
#include <iostream>
using namespace std;
int main() {
JavaVMOption jvmopt[1];
jvmopt[0].optionString = (char *) "-Djava.class.path=";
JavaVMInitArgs vmArgs;
vmArgs.version = JNI_VERSION_1_6;
vmArgs.nOptions = 1;
vmArgs.options = jvmopt;
vmArgs.ignoreUnrecognized = JNI_TRUE;
// Create the JVM
JavaVM *javaVM;
JNIEnv *jniEnv;
long flag = JNI_CreateJavaVM(&javaVM, (void**)
&jniEnv, &vmArgs);
if (flag == JNI_ERR) {
cout << "Error creating VM. Exiting...\n";
return 1;
}
javaVM->DestroyJavaVM();
return 0;
}
但是当我尝试构建我的项目时(我正在使用CLion),构建完成时出现错误:
Undefined symbols for architecture x86_64:
"_JNI_CreateJavaVM", referenced from:
_main in main.cpp.o
ld: symbol(s) not found for architecture x86_64
这是我的CMakeLists.txt:
cmake_minimum_required(VERSION 3.7)
project(repl_native)
set(CMAKE_CXX_STANDARD 14)
find_package(Java REQUIRED)
find_package(JNI REQUIRED)
include(UseJava)
include_directories(${JNI_INCLUDE_DIRS})
set(SOURCE_FILES main.cpp)
add_executable(repl_native ${SOURCE_FILES})
我认为在CMakeList中必须提供链接共享库jvm.dylib或类似的东西,但我不知道它的位置以及如何将此链接添加到cmake。我也在使用macOS。
答案 0 :(得分:0)
看起来你缺少JVM库。
看看这里:
http://jnicookbook.owsiak.org/recipe-no-027/
我知道这不是你想要的,但在你拒绝伸出援助之前,先看看那里;)
此样本是为macOS准备的。它使用Makefile,但你仍然可以选择一些设置 - 比如用于构建代码的库。
注意:
-L${JAVA_HOME}/jre/lib/server/ \
-ljvm \
-rpath ${JAVA_HOME}/jre/lib/server
您还可以在此处找到包含CLion的示例代码:
http://jnicookbook.owsiak.org/recipe-No-D001/
这也不是你想要的,但是,它可能会有所帮助。
与JNI玩得开心。