c++ - rtw_android.c 错误 : implicit declaration of function ‘strnicmp’ [-Werror=implicit-function-declaration]

标签 c++ c

我正在尝试为 Kali linux 2.0 安装我的 Alfa AWUS036ACH 适配器

我已经修复了之前的错误,但现在我被困在这里了。这是错误 我正在接收。

os_dep/linux/rtw_android.c:345:3: error: implicit declaration of function ‘strnicmp’ [-Werror=implicit-function-declaration] if(0 == strnicmp(cmdstr , android_wifi_cmd_str[cmd_num], strlen(android_wifi_cmd_str[cmd_num])) ) ^

我的编码技能没有达到标准,我仍在学习中,因此我们将不胜感激。

具体代码如下:

int rtw_android_cmdstr_to_num(char *cmdstr)
{
    int cmd_num;
    for(cmd_num=0 ; cmd_num<ANDROID_WIFI_CMD_MAX; cmd_num++)
        if(0 == strnicmp(cmdstr , android_wifi_cmd_str[cmd_num], strlen(android_wifi_cmd_str[cmd_num])) )
        break;

return cmd_num;
}

我看了其他人对其他问题的回答,我不确定这段代码应该如何调整。

最佳答案

部分回答你的问题:

Kali Linux 2.0 基于 Debian Jessie,带有 Linux 4.x 内核。

在最近的 Linux 版本中,系统调用 strnicmp 已被弃用并替换为包装器,以允许稍后删除,以支持 strncasecmp。另见 this commit log .

了解您的系统是否支持这些调用的一种方法是在内核符号表中查找它们的名称,该表包含名称和它们的内存位置。此符号表通常由名为 System.map 的文件表示,位于 /boot/ 中。

Linux 2.6.32 的示例:

    $ grep -e strnicmp -e strncasecmp /boot/System.map-2.6.32
    ffffffff81298450 T strnicmp
    ffffffff81298540 T strncasecmp
    ffffffff8183a680 r __ksymtab_strncasecmp
    ffffffff8183a6a0 r __ksymtab_strnicmp
    ffffffff8184e0d0 r __kcrctab_strncasecmp
    ffffffff8184e0e0 r __kcrctab_strnicmp
    ffffffff81861153 r __kstrtab_strncasecmp
    ffffffff8186116a r __kstrtab_strnicmp

Linux 4.4.6 的示例:

    $ grep -e strnicmp -e strncasecmp /boot/System.map-4.4.6
    ffffffff813aaee0 T strncasecmp
    ffffffff81b484a0 R __ksymtab_strncasecmp
    ffffffff81b608c8 r __kcrctab_strncasecmp
    ffffffff81b776e4 r __kstrtab_strncasecmp

要在不回归的情况下解决您的问题,必须将反射(reflect)重命名的子句添加到代码中,在本例中为 rtw_android.c

Linux 版本 4.0.0 的差异示例:

    diff -urN os_dep.orig/linux/rtw_android.c os_dep/linux/rtw_android.c
    --- os_dep.orig/linux/rtw_android.c 2016-03-29 13:53:46.657398453 +0200
    +++ os_dep/linux/rtw_android.c  2016-03-29 13:26:13.871323615 +0200
    @@ -30,6 +30,10 @@
     #endif
     #endif /* defined(RTW_ENABLE_WIFI_CONTROL_FUNC) */

    +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0))
    +#define strnicmp strncasecmp
    +#endif
    +

     const char *android_wifi_cmd_str[ANDROID_WIFI_CMD_MAX] = {
        "START",

关于c++ - rtw_android.c 错误 : implicit declaration of function ‘strnicmp’ [-Werror=implicit-function-declaration],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34702202/

相关文章:

c - isalpha 实现 C

c - Linux, fork 进程立即挂起

c - 使用 glibc regex.h 在 C 中进行电子邮件验证

c - 这是链表中remove_from_front的正确实现吗?

c++ - 分析永不退出的基于 C 或 C++ 的应用程序

c++ - 在 C++ 中使用 typedef 声明结构

c++ - 使用 CImg 镜像图像?

c++ - g++ openCV 编译错误在线不存在

c++ - C++ 编译器是否根据使用情况内联函数?

c++ - C++11 中的 lambda 表达式是什么?