【错误记录】Visual Studio 中编译 NDK 报错 ( no matching function for call to ‘cacheflush‘ cacheflush(); )
文章目錄
- 一、報錯信息
- 二、報錯信息
一、報錯信息
使用 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 架構 , 對應的實現也不同 ;
總結
以上是生活随笔為你收集整理的【错误记录】Visual Studio 中编译 NDK 报错 ( no matching function for call to ‘cacheflush‘ cacheflush(); )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android 逆向】函数拦截 ( G
- 下一篇: 【Android 逆向】函数拦截 ( 修