架构x86_64的未定义符号:JNI_CreateJavaVM OS-X Xcode

时间:2014-03-14 05:42:44

标签: java-native-interface xcode5 osx-mountain-lion

我正在尝试使用Mac OS-X Mountain Lion上的Xcode编译以下用于创建Java虚拟机的C ++代码:

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

出现以下错误: 架构x86_64的未定义符号:&#34; _JNI_CreateJavaVM&#34;。

从这些类似的问题:


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


我认为我错过了对libjvm.dylib的库引用。问题是,我不确定如何让Xcode识别/包含用于链接的库,

我已经尝试将以下目录(所有这些目录都包含libjvm.dylib文件)放入Xcode的Library Search Paths列表中,但没有结果:


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

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

/System/Library/Frameworks/JavaVM.framework/Libraries /


我还是OS-X和Xcode的新手,其他问题的答案都与使用gcc或g ++进行编译有关,我对它的经验较少,所以我需要知道的是:我如何告诉Xcode编译器在哪里找到libjvm.dylib,以及哪个libjvm.dylib是我应该链接到的?

1 个答案:

答案 0 :(得分:6)

好的,找到了解决方案,

相当于g ++的

-L<library/to/link>
Xcode中的

设置是构建阶段标签下的带库的链接二进制设置, 不是我上面提到的图书馆搜索路径列表。

我需要链接的库实际上是/System/Library/Frameworks/JavaVM.framework/JavaVM

不是libjvm.dylib