1. 程式人生 > 其它 >Bug 記錄: gcc 7.5.0 編譯 glib-2.9.6 報錯

Bug 記錄: gcc 7.5.0 編譯 glib-2.9.6 報錯

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) +#elif
defined (__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]