2017-05-08 67 views
0

你好我一直在試圖從C++代碼創建JVM實例:不能建項目,有錯誤 - 對建築x86_64的未定義符號:「_JNI​​_CreateJavaVM」

#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; 
} 

但是當我嘗試建立我的項目(我使用的克利翁)構建完成與錯誤:

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

它看起來像你缺少JVM庫。

到這裏看看:

http://jnicookbook.owsiak.org/recipe-no-027/

我知道這是不是你在尋找什麼,但你拒絕伸出援手之前,先看看有;)

此示例爲macOS準備。它使用Makefile,但你仍然可以選擇一些設置 - 比如用於構建代碼的庫。

要注意:

-L${JAVA_HOME}/jre/lib/server/ \ 
    -ljvm \ 
    -rpath ${JAVA_HOME}/jre/lib/server 

您還可以找到示例代碼與克利翁在這裏:

http://jnicookbook.owsiak.org/recipe-No-D001/

這也是你正在尋找不完全是對的,但儘管如此,也許它將有所幫助。

與JNI玩得開心。

相關問題