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]