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

Yocto 3.4编译glibc 2.34出现__dso_handle未定义链接错误如何解决

问题原因分析

该错误是glibc 2.34版本的原生编译bug,Yocto 3.4的官方glibc配方未合入对应修复补丁,触发逻辑如下:

  • glibc 2.34重构malloc调试组件后,mtrace-impl.c中调用__cxa_atexit注册销毁回调时,直接引用了__dso_handle符号
  • 该符号默认由gcc在编译共享库时自动注入,但glibc编译libc_malloc_debug_pic.a的规则中未添加对应编译参数,导致符号未生成
  • 链接生成libc_malloc_debug.so时,找不到该隐藏符号,同时x86_64架构下PIC代码的重定位类型不匹配,最终触发链接失败。

可行解决方案

可根据使用场景选择对应方案:

  • 方案1:合并上游修复补丁。修改逻辑为将mtrace-impl.c中__cxa_atexit调用的第三个参数从__dso_handle替换为&__libc_malloc_debug,该符号是libc_malloc_debug.so自身的导出符号,可完全替代__dso_handle的作用。在自定义层中创建recipes-core/glibc/glibc_2.34.bbappend文件,添加SRC_URI += "file://fix-mtrace-dso-handle.patch",将补丁放到对应配方的files目录下重新编译即可。
  • 方案2:临时禁用malloc调试组件。如果不需要用到malloc调试能力,可直接在上述glibc_2.34.bbappend中添加配置EXTRA_OECONF += "--disable-malloc-debug",编译时会跳过libc_malloc_debug.so的生成,不影响glibc核心功能的使用,改法最简单。
  • 方案3:升级Yocto版本到4.0及以上,后续版本的官方glibc配方已经合入了该问题的修复补丁,无需额外修改即可正常编译。

内容的提问来源于stack exchange,提问作者Thảo M. Hoàng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:36:02