• 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]

     

  • 相关阅读:
    adb命令
    linux常用命令(2)
    Cisco路由器配置基本命令
    linux常用命令
    跨站脚本攻击xss
    选择合适的索引列顺序
    索引的选择性
    mysql索引类型(按存储结构划分)
    mysql数据类型优化
    vim基本命令总结
  • 原文地址:https://www.cnblogs.com/yqmcu/p/15084263.html
Copyright © 2020-2023  润新知