启用C++ Address Sanitizer编译报LNK1104无法打开clang_rt.asan相关lib错误
Address Sanitizer 链接错误LNK1104问题排查
报错原因
该错误是Visual Studio环境下Address Sanitizer(ASAN)运行时依赖缺失导致的,具体触发原因通常为以下几类:
- 你的Visual Studio未安装C++ ASAN对应的可选组件
- 项目配置的库搜索路径未包含ASAN运行库的存放目录
- 项目使用的运行时版本、目标架构与ASAN库版本不匹配
- 低版本Visual Studio对ASAN的支持不完善,缺少对应的thunk库文件
解决方案
按优先级依次执行以下排查步骤即可解决:
- 安装ASAN可选组件
打开Visual Studio Installer,选择你正在使用的VS版本点击「修改」,在「使用C的桌面开发」工作负荷的可选组件列表中,找到「C AddressSanitizer」勾选后完成安装,重启Visual Studio后重新编译项目。 - 补充库搜索路径
如果已安装组件仍报错,手动添加ASAN库的路径到项目配置:
打开项目属性页,依次进入「链接器」-「常规」-「附加库目录」,添加对应架构的ASAN库路径,x64架构的默认路径格式为C:\Program Files\Microsoft Visual Studio\<你的VS版本>\<VS发行版本>\VC\Tools\MSVC\<MSVC版本号>\lib\x64,替换为你本地的实际路径即可,注意需要保证属性页顶部的配置平台选择的是「x64」,和报错的x86_64架构一致。 - 对齐运行库配置
ASAN默认依赖动态C/C运行库,打开项目属性页「C/C」-「代码生成」-「运行库」,确认配置为/MD(Release模式)或/MDd(Debug模式),不要使用静态运行库/MT//MTd,否则会找不到匹配的ASAN库。 - 升级VS版本
如果你使用的是VS2019 16.9之前的版本,建议升级到VS2019最新版或VS2022,旧版本对x64架构的ASAN支持存在缺陷,容易出现库文件缺失的问题。
内容的提问来源于stack exchange,提问作者bobobobo
相关产品推荐
相关产品推荐

