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]

 

posted @ 2021-07-31 14:57  缘起花渊  阅读(529)  评论(0编辑  收藏  举报