'AttachCurrentThread' in '_JavaVM'; did you mean 'attachCurrentThread'?
auto result = JVM.load()->AttachCurrentThread(&env, nullptr);
^~~~~~~~~~~~~~~~~~~
attachCurrentThread
/opt/android-sdk/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/sysroot/usr/include/jni.h:1058:10: note: 'attachCurrentThread' declared here
jint attachCurrentThread(JNIEnv** p_env, void* thr_args)
最近一直在弄 C++/JNI 这一块的东西,好巧不巧,碰到了一个很奇怪的编译问题,AttachCurrentThread
这个方法居然找不到了。这个方法是定义在 jni.h
中的,不可能签名变了,也不可能方法丢失的。出现这个问题的原因其实很好玩。
我在 coding 和 debug 的时候,因为查看到了 jni.h
这一层的文件, Android Studio 很强大,直接通过文件的路径,跳转到了这个文件上,并且打开了这个文件供查看。而我在查看这个文件的时候,不小心把这个 AttachCurrentThread
给改成了 attachCurrentThread
,而这个文件又不是只读的,所以这个文件就被写入成功了,又因为这个文件并不在我的版本控制中,所以看不到修改记录,每次编译的时候都会引用到这个文件,所以每次都会失败。
退回修改以后一切正常。