2014-03-14 23 views
5

Ich versuche, den folgenden C++ Code für die Erstellung einer Java Virtual Machine zu kompilieren, mit Xcode unter Mac OS-X Mountain Lion:undefinierte Symbole für Architektur x86_64: JNI_CreateJavaVM OS-X Xcode

JNIEnv * createVM(JavaVM **jvm){ 
    JNIEnv * retEnv = NULL; 
    JavaVMInitArgs vm_args = *new JavaVMInitArgs(); 
    JavaVMOption *options = new JavaVMOption[1]; 

    std::string sJavaInstallPath = "-Djava.class.path=" + findJavaPath(); 

    if(sJavaInstallPath == "-Djava.class.path="){ 
     return NULL; 
    } 

    options[0].optionString = const_cast<char*>(sJavaInstallPath.c_str()); 
    vm_args.version = JNI_VERSION_1_6; 
    vm_args.nOptions = 1; 
    vm_args.options = options; 
    vm_args.ignoreUnrecognized = false; 

    long status = JNI_CreateJavaVM(jvm, (void**)&retEnv, &vm_args); 

    if(status == JNI_ERR){ 
     std::cout << "Failure: Unable to load JVM \t Exit" << std::endl; 
    }else if(status == JNI_OK){ 
     std::cout << "CreateVM:\t\tJVM loaded successfully" << std::endl; 
    } 

    delete options; 
    return retEnv; 
}; 

Welche das gibt Folgefehler: Nicht definierte Symbole für Architektur x86_64: "_JNI_CreateJavaVM".

Aus diesen ähnlichen Fragen:


undefined reference to `JNI_CreateJavaVM' linux

How can I use JNI in C++ to use a Java class?

undefined symbol: JNI_CreateJavaVM in Linux

http://lists.apple.com/archives/java-dev/2005/Apr/msg00067.html

http://lists.apple.com/archives/java-dev/2005/Apr/msg00068.html


entnehme ich, dass ich einen Bibliotheksverweis fehlt bin libjvm.dylib. Das Problem ist, dass ich bin nicht sicher, wie Xcode erhalten, um die Bibliothek zum Verknüpfen zu erkennen/zu integrieren,

Ich habe versucht, die folgenden Verzeichnisse (die alle eine libjvm.dylib-Datei enthalten) in die Bibliothek Suchpfade setzen Liste in Xcode, ohne Ergebnis:


/System/Library//Java/JavaVirtualMachines/1.6.0.jdk/Contents/Libraries/

/Library//Java/JavaVirtualMachines/jdk1.7.0 _51.jdk/Inhalt/Home/jre/lib/server/

/System/Bibliothek/Framew orks/JavaVM.framework/Bibliotheken/


Ich bin noch recht neu zu OS-X und Xcode, und die Antworten auf die anderen Fragen beziehen sich alle auf die Erstellung gcc oder g ++ verwenden, die ich noch weniger Erfahrung haben mit, also was ich wissen muss ist: Wie sage ich dem Xcode Compiler, wo libjvm.dylib zu finden ist, und welche libjvm.dylib ist die, mit der ich verlinken soll?

Antwort

6

OK, fand die Lösung,

das Äquivalent von g ++ 's

-L<library/to/link> 

Einstellung in Xcode ist die Link-Binary mit Bibliotheken Einstellung unter dem Build-Phasen Registerkarte nicht der Bibliothek Suche Pfade, die ich oben erwähnt habe.

und die Bibliothek, die ich tatsächlich war zu verbinden benötigen /System/Library/Frameworks/JavaVM.framework/ JavaVM,

nicht libjvm.dylib