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

编译xcrysden依赖Mesa时make报错,求解决方案

解决Mesa 18.3.6编译时链接器符号重复定义错误

错误原因

链接器报出的INTEL_DEBUG和radeon_enabled_debug_types重复定义,本质是全局变量在多个编译单元中被重复声明并定义。当编译静态库时,这些全局变量会被保留在每个静态库的目标文件中,最终链接多个静态库时,链接器发现同一个符号存在多个定义,因此抛出错误:

  • INTEL_DEBUG在src/intel/common/gen_disasm.c和src/intel/common/gen_debug.c中都被定义为全局变量
  • radeon_enabled_debug_types在src/mesa/drivers/dri/radeon/radeon_debug.c和src/mesa/drivers/dri/r200/radeon_debug.c中重复定义

修复步骤

1. 修正重复定义的全局变量

  • 针对INTEL_DEBUG:
    打开src/intel/common/gen_disasm.c,找到第31行的变量定义(类似int INTEL_DEBUG = 0;),将其改为外部声明:

    extern int INTEL_DEBUG;
    

    保留src/intel/common/gen_debug.c中第39行的原始定义不动。

  • 针对radeon_enabled_debug_types:
    选择src/mesa/drivers/dri/radeon/radeon_debug.c或src/mesa/drivers/dri/r200/radeon_debug.c其中一个文件,将第60行的变量定义改为外部声明:

    extern unsigned int radeon_enabled_debug_types;
    

    保留另一个文件中的原始定义。

2. 调整编译选项避免符号冲突

重新配置Mesa时,添加符号可见性控制的编译选项,将非必要全局符号隐藏,减少冲突概率:

./configure CFLAGS="-fvisibility=hidden" CXXFLAGS="-fvisibility=hidden" [你的原有配置参数]

3. 清理并重新编译

执行以下命令清理旧编译产物,重新编译:

make clean
make -j$(nproc)

4. (可选)调整链接规则

如果上述方法无效,进入src/mesa/drivers/dri目录,打开Makefile找到第719行附近的mesa_dri_drivers.la链接规则,检查是否同时链接了包含重复符号的静态库,尝试调整链接顺序或移除重复的库依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 14:34:54