文章目录
一、报错信息
二、报错信息
一、报错信息
使用 Visual Studio 2019 编译 Android 平台的 NDK 项目 ; 编译时报错 ;
报错信息 :
1>./native/native.cpp(428,14): warning G0C39A92D: 'SearchCode' has C-linkage specified, but returns user-defined type 'std::string' (aka 'basic_string<char>') which is incompatible with C [-Wreturn-type-c-linkage] 1> std::string SearchCode(unsigned char* data,unsigned size){ 1> ^ 1>./native/native.cpp(658,5): error GEF7559A7: no matching function for call to 'cacheflush' 1> cacheflush(); 1> ^~~~~~~~~~ 1>D:/001_Develop/001_SDK/Sdk/ndk/android-ndk-r14b/build//../platforms/android-19/arch-arm/usr/include\unistd.h:183:12: note: candidate function not viable: requires 3 arguments, but 0 were provided 1>extern int cacheflush(long start, long end, long flags); 1> ^ 1>1 warning and 1 error generated. 1>make: *** [obj/local/armeabi-v7a/objs/native/native/native.o] Error 1 1>D:\001_Develop\017_Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.MakeFile.Targets(46,5): error MSB3073: 命令“"D:\001_Develop\001_SDK\Sdk\ndk\android-ndk-r14b\build\ndk-build.cmd" NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=Android.mk NDK_APPLICATION_MK=Application.mk ”已退出,代码为 2。 1>已完成生成项目“magic.vcxproj”的操作 - 失败。 ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
二、报错信息
仔细研究报错信息 , 发现 D:/001_Develop/001_SDK/Sdk/ndk/android-ndk-r14b/build//../platforms/android-19/arch-arm/usr/include\unistd.h:183:12: note: candidate function not viable: requires 3 arguments, but 0 were provided , 调用的函数头文件是 android-19/arch-arm/usr/include\unistd.h , 这是 ARM 平台的头文件 , 其中的函数定义的都是 ARM 架构的函数 ;
在 ARM 架构的 android-19/arch-arm/usr/include/unistd.h 头文件中 , cacheflush 函数为 :
extern int cacheflush(long start, long end, long flags);
在 x86 架构中该系统调用无效 ;
如果编译的目标 函数库 或 可执行文件 架构有 x86 架构 , 就会报错 , 因为该函数只支持 ARM 架构 ;
#ifndef __i386__ cacheflush();
在 Application.mk 中 , 要声明只为 x86 编译函数库 , 注释掉 armeabi-v7a armeabi 这两个目标架构 ;
APP_ABI := x86 #armeabi-v7a armeabi APP_STL := gnustl_static APP_PLATFORM := android-19
涉及 CPU 操作时 , 注意编译的架构 , 以及引用的依赖库 ;
cacheflush 函数是系统调用中刷新 CPU 高速缓存的函数 , 不同的 CPU 架构 , 对应的实现也不同 ;