我正在尝试构建一个无线驱动程序,该驱动程序最终由于隐式声明错误而失败:

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(我相信)。 Here is where it is defined (github)和... if you scroll up a little bit, it only seems to be dependent on CSCAN being defined

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。

最佳答案

在5781行,还有另一个#define正在掩盖wl_iw_set_cscan

关于c - 隐式声明时出错,但函数在源文件中声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12849453/

10-11 19:32