我正在尝试为Kali linux 2.0安装我的Alfa AWUS036ACH适配器
我已修复先前的错误,但现在我被困在这里。这是错误 我收到了。
os_dep / linux / rtw_android.c:345:3:错误:隐式声明 函数'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;
}
我查看了其他人对其他问题的回答,我不确定如何调整此代码。
答案 0 :(得分:2)
对您的问题的部分答案:
基于Debian Jessie的Kali Linux 2.0带有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
要解决您的问题而不进行回归,必须将反映重命名的子句添加到代码中,在本例中为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",