error: macro "LIST_HEAD" passed 2 arguments, but takes just 1

新項目把libevent-2.1.11-stable移植到mt7620的Openwrt上,移植完編譯的時候遇到一個報錯

In file included from /usr/local/include/event.h:68:0,
                 from /home/project/base.cpp:26:
/usr/local/include/event2/event_struct.h:166:30: error: macro "LIST_HEAD" passed 2 arguments, but takes just 1
 LIST_HEAD (event_dlist, event); 
                              ^
/usr/local/include/event2/event_struct.h:166:1: error: ‘LIST_HEAD’ does not name a type
 LIST_HEAD (event_dlist, event); 

搜了下有個哈皮的解決辦法竟然是把166行的LIST_HEAD (event_dlist, event);改爲 #define LIST_HEAD (event_dlist, event);

性質都不一樣了,明顯不靠譜。

搜了下頭文件 ,LIST_HEAD是在event_struct.h 99行定義的,

97 #ifndef LIST_HEAD

98 #define EVENT_DEFINED_LISTHEAD_

99 #define LIST_HEAD(name, type)  

在Openwrt的交叉編譯工具鏈裏的list.h找到了同名的宏。

#define LIST_HEAD(name) struct list_head name = LIST_HEAD_INIT(name)

感覺有可能就是衝突了。把libevent裏相關的頭文件都搜了下,把 所有用到LIST_HEAD的全改成了LIST_HEAD_LIBEVENT。

問題解決。

存在問題:

搜了下文件,發現LIST_HEAD這個宏在交叉編譯成庫前也有event-internal.h以及bufferevent-internal.h裏也有用到。不過考慮到編譯的時候第一步預處理就是替換宏,理論上來說不影響。問題不大。

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