jni.h 使用 JVM 的错误(Java 到 C++)

jni.h Errors using JVM (Java to C++)

我正在尝试使用 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();

但是,我收到 2 个错误,它们如下:

  1. "_JNI_CreateJavaVM",引用自: _main main.o"

  2. ld:未找到体系结构的符号 x86_64 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

有人对如何解决这些问题有任何意见吗?非常感谢。

Java 版本:1.7.0_71-b14 Java (TM) SE 运行时环境:(build 1.7.0_71-b14) Java HotSpot(TM) 64 位 服务器虚拟机(内部版本 24.71-b01,混合模式)

如果您有合适的共享对象库(.so on Linux,.dll on Windows)检查您在编译器配置之间使用的架构是否相同和你的共享库集。

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

我设法弄清楚我必须做什么。我正在使用 MacBook Pro 并使用 XCode。我做了以下事情:

  1. 在左侧面板上,我选择了我正在处理的项目。
  2. 我点击了屏幕中央的'Build Phases'。
  3. 我打开了 'Link Binary with Libraries' 选项卡。
  4. 我点击了“+”号并添加了 'JavaVM.framework' 文件。

这对我有用。