我正在尝试构建一个无线驱动程序,该驱动程序最终因隐式声明错误而失败:
wl_iw.c: In function 'wl_iw_set_priv':
wl_iw.c:7649:4: error: implicit declaration of function 'wl_iw_set_cscan' [-Werror=implicit-function-declaration]
这是它尝试调用函数的地方:
#if defined(CSCAN)
else if (strnicmp(extra, CSCAN_COMMAND, strlen(CSCAN_COMMAND)) == 0)
ret = wl_iw_set_cscan(dev, info, (union iwreq_data *)dwrq, extra);
#endif
因此,似乎只有在定义 CSCAN 时才会调用它。好吧,在源文件中,如果声明了 CSCAN 也声明了 wl_iw_set_cscan (我相信)。 这是定义它的地方(github),并且...如果您向上滚动一点,它似乎只依赖于定义的 CSCAN。
CSCAN 是明确定义的,如果我进行详细构建,则会显示:
arm-linux-androideabi-gcc *snip* -DCSCAN *snip* -c -o /home/owner/android-wmon/core/compat-wireless-3.6-rc7-1/drivers/net/wireless/bcmdhd/wl_iw.o /home/owner/android-wmon/core/compat-wireless-3.6-rc7-1/drivers/net/wireless/bcmdhd/wl_iw.c
我什至可以通过在 wl_iw.c 的顶部放置一个“#define CSCAN”来加倍确定,它会抱怨它被定义了两次。所以我很肯定 CSCAN 的定义。
如果是这种情况,为什么我会收到隐式定义警告变成错误?由于定义了 CSCAN,因此应定义 wl_iw_set_cscan。