使用JVM(Java到C+;+;)的jni.h错误 我试图用JNI.H从C++调用java类。经过一些研究,我使用了以下代码: JavaVM *jvm; JNIEnv *env; JavaVMInitArgs vm_args; JavaVMOption* options = new JavaVMOption[1]; options[0].optionString = "-Djava.class.path=/usr/lib/java"; vm_args.version = JNI_VERSION_1_6; vm_args.nOptions = 1; vm_args.options = options; vm_args.ignoreUnrecognized = false; JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); delete options; jclass cls = env->FindClass("Test.java"); jmethodID mid = env->GetStaticMethodID(cls, "test", "(I)V"); env->CallStaticVoidMethod(cls, mid, 100); jvm->DestroyJavaVM();

使用JVM(Java到C+;+;)的jni.h错误 我试图用JNI.H从C++调用java类。经过一些研究,我使用了以下代码: JavaVM *jvm; JNIEnv *env; JavaVMInitArgs vm_args; JavaVMOption* options = new JavaVMOption[1]; options[0].optionString = "-Djava.class.path=/usr/lib/java"; vm_args.version = JNI_VERSION_1_6; vm_args.nOptions = 1; vm_args.options = options; vm_args.ignoreUnrecognized = false; JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args); delete options; jclass cls = env->FindClass("Test.java"); jmethodID mid = env->GetStaticMethodID(cls, "test", "(I)V"); env->CallStaticVoidMethod(cls, mid, 100); jvm->DestroyJavaVM();,java,c++,jvm,java-native-interface,Java,C++,Jvm,Java Native Interface,但是,我得到2个错误,它们如下所示: “_JNI_CreateJavaVM”,引用自: _在main.o中输入main“ ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用) 有人对如何解决这些问题有什么意见吗?非常感谢 Java版本:1.7.0_71-b14 Java(TM)SE运行时环境:(构建1.7.0_71-b14)Java热点(TM)64位 服务器VM(构建24.71-b01,混合模式)如果您有适当的共享对象库(.so在Linux上,.dl

但是,我得到2个错误,它们如下所示:

  • “_JNI_CreateJavaVM”,引用自: _在main.o中输入main“

  • ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)

  • 有人对如何解决这些问题有什么意见吗?非常感谢

    Java版本:1.7.0_71-b14 Java(TM)SE运行时环境:(构建1.7.0_71-b14)Java热点(TM)64位
    服务器VM(构建24.71-b01,混合模式)

    如果您有适当的共享对象库(
    .so
    在Linux上,
    .dll
    在Windows上),请检查编译器配置和共享库集之间是否使用相同的体系结构


    如果您在链接阶段没有引用所述共享对象库,则需要这样做。

    我设法找到了我必须做的事情。我正在使用MacBook Pro和XCode。我做了以下工作:

  • 在左侧面板上,我选择了正在处理的项目
  • 我点击了屏幕中央的“构建阶段”
  • 我打开了“链接二进制与库”选项卡
  • 我点击了“+”号并添加了“JavaVM.framework”文件

  • 这对我很有用。

    看起来你的代码没有链接到JNI库。如何链接取决于你的构建系统。请公布你使用的平台、JDK和构建环境。@AlexCohn Java版本:1.7.0_71-b14 Java(TM)SE运行时环境(构建1.7.0_71-b14)Java热点(TM)64位服务器虚拟机(构建24.71-b01,混合模式)可能是@AlexCohn的副本,该答案适用于Linux。我使用Mac,也可以使用Windows。