2017-05-08 3 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; 
} 

しかし、私は私のプロジェクトをビルドしようとすると、

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}) 

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です:私は、ビルドがエラーで終了した)CLionを使用しています私はCMakeListで共有ライブラリのjvm.dylibなどのリンクを提示する必要があると思いますが、どこに配置されているのか分からず、cmakeにリンクする方法を追加します。また、私はmacOSを使用しています。

答えて

0

JVMライブラリが不足しているようです。

こちらをご覧ください:

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

を、私は、これはあなたが探している正確に何ではないですけど、あなたが手を助け拒絶する前に、そこを見てください。)

をこのサンプルがありますmacOSのために用意されています。それはMakefileを使用しますが、コードを構築するために使用されるライブラリのようないくつかの設定を引き継ぐことができます。あなたがここにもCLionとサンプルコードを見つけることができます

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

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

これは、あなたが探している正確に何もないが、それでも、多分それに

ご注意ください役立ちます。

JNIで楽しく過ごしてください。

関連する問題