AndroidStudio之NDK常见编译错误

本文详细解析了在使用Android NDK进行编译时遇到的常见错误,包括C/C++混合编程引起的成员引用错误、Makefile规则缺失导致的目标文件无法生成问题,以及字符串返回时的参数错误。提供了具体的解决方案,如调整代码语法、修改Android.mk文件和清理编译缓存。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、执行ndk-build 提示error: request for member 'FindClass' in something not a structure or union
/Users/lvxiangan/Workspace/Android_Studio/NDK/app/src/main/jni/test.c:33:30: error: member reference base type 'JNIEnv' (aka 'const struct JNINativeInterface *') is not a structure or union
    jclass native_class = env->GetObjectClass(contextObject);
                          ~~~^ ~~~~~~~~~~~~~~
/Users/lvxiangan/Workspace/Android_Studio/NDK/app/src/main/jni/test.c:34:26: error: member reference base type 'JNIEnv' (aka 'const struct JNINativeInterface *') is not a
      structure or union
    jmethodID pm_id = env->GetMethodID(native_class, "getPackageManager", "()Landroid/content/pm/PackageManager;");
                      ~~~^ ~~~~~~~~~~~
/Users/lvxiangan/Workspace/Android_Studio/NDK/app/src/main/jni/test.c:35:25: error: member reference base type 'JNIEnv' (aka 'const struct JNINativeInterface *') is not a
      structure or union
    jobject pm_obj = env->CallObjectMethod(contextObject, pm_id);
                     ~~~^ ~~~~~~~~~~~~~~~~
/Users/lvxiangan/Workspace/Android_Studio/NDK/app/src/main/jni/test.c:36:26: error: member reference base type 'JNIEnv' (aka 'const struct JNINativeInterface *') is not a
      structure or union

错误原因:env变量在C和C++ 语法表达不一致引起。
C++   :env->FindClass("java/lang/String")
C语言:(*env)->FindClass(env, "java/lang/String")



2、No rule to make target needed by *.o
make: *** No rule to make target `x x x/xxxx/xxx/xx.c', needed by `x x x/xxxx/xxx/xx.c.o'.  Stop.
错误原因:Android.mk没有修改文件后缀名,如原来是LOCAL_SRC_FILES := test.c,修改成

step1)LOCAL_SRC_FILES := test.cpp
step2)删除/
app/src/main/obj/local 文件夹

 

3、返回一个字符串报错: error: too many arguments to function call, expected single argument 'bytes', have 2 arguments
      return env->NewStringUTF(env,"This is my first NDK Application");
             ~~~~~~~~~~~~~~~~~     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Users/lvxiangan/ProgramFiles/AndroidStudio/Sdk/ndk-bundle/sysroot/usr/include/jni.h:840:5: note: 'NewStringUTF' declared here
    jstring NewStringUTF(const char* bytes)
    ^
1 error generated.

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值