You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux 64位系统交叉编译32位libcairo-1.14.2出现重定义错误如何解决

错误根因

该报错属于cairo 1.14.2版本与高版本系统Xrender头文件的兼容性问题:cairo 1.14.2发布时Xrender官方还未内置_XLinearGradient等梯度结构定义,因此cairo在私有头文件cairo-xlib-xrender-private.h中自行补充了这些定义;而当前你使用的64位Linux系统自带的Xrender开发包版本较高,头文件/usr/include/X11/extensions/Xrender.h已经官方实现了这部分结构,二者重复定义触发编译错误。
另外你之前的编译参数存在两处错误,也会加剧头文件查找异常:

  • configure参数中等号两侧不允许加空格,会导致参数识别失败
  • --build参数应填写当前宿主机的64位架构(x86_64-linux-gnu),填写i386会导致configure错误识别编译环境,优先读取64位头文件
解决步骤
  • 第一步:安装32位依赖库
    确保系统已安装32位版本的X11、Xrender开发包,避免编译时找不到32位依赖回退使用cairo内部定义:
    Debian/Ubuntu系执行:
    sudo apt install libx11-dev:i386 libxrender-dev:i386
    
    RHEL/CentOS/Fedora系执行:
    sudo yum install libX11-devel.i686 libXrender-devel.i686
    
  • 第二步:修改cairo源码头文件移除重复定义
    打开源码目录下的src/cairo-xlib-xrender-private.h文件,找到第106行开始的struct _XLinearGradient、struct _XRadialGradient、struct _XConicalGradient三个结构的定义和typedef声明,直接删除这部分重复代码,或者在这段代码前后加版本判断宏:
    #if XRENDER_MAJOR < 0 || (XRENDER_MAJOR == 0 && XRENDER_MINOR < 10)
    /* 原有三个梯度结构的定义代码放在此处 */
    #endif
    
  • 第三步:修正编译配置命令
    先清理之前的编译缓存:
    make distclean
    
    再执行正确的configure命令,注意参数无空格、指定32位编译链接参数、指定32位pkgconfig路径(以下路径为Debian系示例,RHEL系32位pkgconfig路径为/usr/lib/pkgconfig,可自行调整):
    ./configure --prefix="/usr/work/libcairo-1.14.2/compiled/" --host=i686-pc-linux-gnu --build=x86_64-linux-gnu CFLAGS="-m32 -O2" CXXFLAGS="-m32 -O2" LDFLAGS="-m32" PKG_CONFIG_PATH="/usr/lib/i386-linux-gnu/pkgconfig"
    
  • 第四步:编译安装
    make -j$(nproc)
    make install
    

内容的提问来源于stack exchange,提问作者famedoro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 06:45:03