Bug 記錄: gcc 7.5.0 編譯 glib-2.9.6 報錯
阿新 • • 發佈:2021-07-31
Bug 描述
最近在學習 gstreamer 時候,瞭解到 gstreamer 是基於 glib 開發的,於是想要學習一下這個傳說的庫 glib。
第一步當然是編譯原始碼,使用的環境是 ubuntu 18.04 - gcc 7.5.0,
在官網上下載了原始碼後,解壓 執行 .configure --prefix=`pwd`/install 一氣呵成。
當執行 make all 編譯的時候,出狀況了。
從上圖大概猜到報錯的原因是:multiple definition 標頭檔案被多次重複定義了。
那麼怎麼解決呢?
藉助於網路,搜尋到一篇古早的貼子 《編譯libglade-2.6.1出錯!!!!》,介紹了和我相同的 bug 。
於是意識到應該是編譯器版本相關的問題,根據 bug 提交網站 的 補丁檔案,修改 ./glib/gutils.h 檔案後,再次編譯就正常了。
patch 檔案如下:
GNOME #315437; Debian #416863; Gentoo #156475; fixes building of packages using glib against GCC 4.2 and 4.3 Index: glib2.0-2.13.4/glib/gutils.h =================================================================== --- glib2.0-2.13.4.orig/glib/gutils.h 2007-06-16 18:27:37.000000000 +0200 +++ glib2.0-2.13.4/glib/gutils.h 2007-06-16 18:30:08.000000000 +0200 @@ -96,9 +96,14 @@ #ifdef G_IMPLEMENT_INLINES # define G_INLINE_FUNC # undef G_CAN_INLINE -#elif defined (__GNUC__) -# define G_INLINE_FUNC extern inline -#elif defined (G_CAN_INLINE) +#elifdefined (__GNUC__) +# if __GNUC_PREREQ (4,2) && defined (__STDC_VERSION__) \ + && __STDC_VERSION__ >= 199901L +# define G_INLINE_FUNC extern __inline __attribute__ ((__gnu_inline__)) +# else +# define G_INLINE_FUNC extern __inline +# endif +#elif defined (G_CAN_INLINE) # define G_INLINE_FUNC static inline #else /* can't inline */ # define G_INLINE_FUNC
參考文獻
[1] 編譯libglade-2.6.1出錯!!!!
[2]156475 – dev-libs/glib and extern inlines w/ gcc-4.3 [patch]