gcc include 順序錯誤

netlink 用戶層部分代碼如下:

#include <linux/netlink.h>
#include <sys/socket.h>

int main()
{
    struct sockaddr_nl src_addr;

    src_addr.nl_family = AF_NETLINK;
    src_addr.nl_pid = getpid();
    src_addr.nl_groups = 0;

    return 0;
}

這已經是個完整的程序了,gcc 編譯出現如下錯誤:

# gcc ccc.c
In file included from ccc.c:1:
/usr/include/linux/netlink.h:35: error: expected specifier-qualifier-list before ‘sa_family_t’
ccc.c: In function ‘main’:
ccc.c:9: error: ‘struct sockaddr_nl’ has no member named ‘nl_family’
ccc.c:10: error: ‘struct sockaddr_nl’ has no member named ‘nl_pid’
ccc.c:11: error: ‘struct sockaddr_nl’ has no member named ‘nl_groups’

爲什麼呢 ?

當然,並不是如錯誤提示那樣 struct sockaddr_nl 沒有 nl_family 成員, 問題在頭文件 include 先後順序上 !

#include <linux/netlink.h>不能放在 #include <sys/socket.h> 前面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章