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

DPDK 21.11开启AddressSanitizer编译提示找不到asan库如何解决

问题说明

基于DPDK 21.11版本开发应用时,需要启用AddressSanitizer排查潜在内存损坏问题,已安装系统源的libasan依赖,在meson构建参数中添加-Db_sanitize=address编译DPDK时构建失败,最终报错:

config/meson.build:427:8: ERROR: C shared or static library 'asan' not found

构建环境关键信息如下:

  • 系统已安装libasan版本:libasan-8.5.0-10.el8.x86_64
  • 实际构建使用的C编译器:gcc-toolset-10提供的GCC 10.3.1
  • Meson版本:0.61.2
  • 操作系统:RHEL/CentOS 8 x86_64
故障根因

系统yum源默认安装的libasan是与系统自带GCC 8.5版本匹配的运行库,而当前构建环境实际调用的是gcc-toolset-10提供的GCC 10.3.1版本。Meson启用sanitize参数时,会查找当前生效编译器版本对应的asan开发库,GCC 10.3版本匹配的libasan未安装,且工具集的库路径未被正确纳入搜索范围,因此触发找不到asan库的报错。

解决步骤
  • 安装与当前生效GCC版本匹配的asan开发库,针对gcc-toolset-10环境执行以下命令:
    yum install gcc-toolset-10-libasan-devel
    
  • 确认shell环境正确激活gcc-toolset-10,避免编译过程混用不同版本GCC的头文件与库文件:
    scl enable gcc-toolset-10 bash
    
    激活后执行两个校验命令确认环境正常:
    1. gcc --version,输出确认版本为10.3.1
    2. ld -lasan --verbose,输出中无cannot find -lasan报错,能定位到libasan.so文件
  • 清理之前失败构建产生的缓存目录,重新执行meson配置:
    rm -rf build
    meson -Db_sanitize=address -Dprefix=/ build
    
  • 配置无报错后,执行编译与安装:
    cd build
    ninja -j$(nproc)
    ninja install
    
配置注意事项
  • 后续编译自研DPDK应用时,需要保持和DPDK编译时一致的GCC环境,同时添加-fsanitize=address的编译、链接参数,否则ASan无法正常检测应用层的内存问题。
  • 运行ASan版本的DPDK程序前,可根据调试需求配置ASan运行时参数,比如调整检测粒度、关闭非必要的泄漏检测、配置符号化路径,避免DPDK大页内存、轮询驱动的特殊逻辑触发误报。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 07:45:35