【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )
生活随笔
收集整理的這篇文章主要介紹了
【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、報錯信息
- 二、解決方案
一、報錯信息
在 Visual Studio 2019 中編譯 Android NDK , 構建方式參考 【Android 逆向】Android 進程注入工具開發 ( Visual Studio 開發 Android NDK 應用 | 使用 Makefile 構建 Android 平臺 NDK 應用 ) 博客 ;
報錯信息如下 :
命令行報錯信息 :
已啟動生成… 1>------ 已啟動生成: 項目: magic, 配置: Debug Win32 ------ 1>[x86] Install : libbridge.so => ../Debug/x86/libbridge.so 1>[x86] Install : cmd => ../Debug/x86/cmd 1>[x86] Compile++ : native <= native.cpp 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(442,15): error GEF7559A7: no matching function for call to 'search_string' 1> strOut += search_string(pModuleName, ver[i].address(), ver[i].realSize() + ver[i].address(), 1> ^~~~~~~~~~~~~ 1>./native/native.cpp:40:13: note: candidate function not viable: no known conversion from 'unsigned char *' to 'const char *' for 4th argument 1>std::string search_string(const char* module, unsigned begin, unsigned end, const char* data, size_t size) { 1> ^ 1>1 warning and 1 error generated. 1>make: *** [obj/local/x86/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 個 ==========Visual Studio 中的報錯信息 :
二、解決方案
search_string 函數定義如下 :
std::string search_string(const char* module, unsigned begin, unsigned end, const char* data, size_t size) {... }上述函數第 444 個參數是 const char* data , 類型是 const char* ;
函數調用時 , 在 const char* data 參數位置 , 傳入了 unsigned char* 類型的數據 ;
std::string SearchCode(unsigned char* data,unsigned size){std::string strOut;strOut += search_string(pModuleName, ver[i].address(), ver[i].realSize() + ver[i].address(),data, size);return strOut;}使用 reinterpret_cast<type-id> (expression) 進行強轉 , 將 unsigned char* 類型的數據 強制轉換為 const char* 類型 ;
修改后 :
std::string SearchCode(unsigned char* data,unsigned size){std::string strOut;strOut += search_string(pModuleName, ver[i].address(), ver[i].realSize() + ver[i].address(),reinterpret_cast<const char*>(data), size);return strOut;}重新編譯項目 :
已啟動生成… 1>------ 已啟動生成: 項目: magic, 配置: Debug Win32 ------ 1>[x86] Install : libbridge.so => ../Debug/x86/libbridge.so 1>[x86] Install : cmd => ../Debug/x86/cmd 1>[x86] Compile++ : native <= native.cpp 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>1 warning generated. 1>[x86] SharedLibrary : libnative.so 1>[x86] Install : libnative.so => ../Debug/x86/libnative.so 1>[x86] Install : tool => ../Debug/x86/tool 1>已完成生成項目“magic.vcxproj”的操作。 ========== 生成: 成功 1 個,失敗 0 個,最新 0 個,跳過 0 個 ==========總結
以上是生活随笔為你收集整理的【错误记录】Android NDK 编译报错 ( no known conversion from ‘unsigned char *‘ to ‘const char *‘ )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【错误记录】记录 Android 命令行
- 下一篇: 【Android 逆向】Android