windows "unresolved external symbol __asan_shadow_memory_dynamic_address" 上的 VC2019 地址消毒器 64 位 link 错误

VC2019 address sanitizer 64 bit link error on windows "unresolved external symbol __asan_shadow_memory_dynamic_address"

下面的简单程序

#include <malloc.h>
int main(int argc, char **argv)
{
    char* arr=malloc(10);
    arr[10]='[=13=]';
    return 0;
}

在 32 位动态链接中使用 VC2019 16.8.2 构建良好

cl -Zi -fsanitize=address -MD clang_rt.asan_dynamic-i386.lib xx.c

并在运行程序时报内存错误。 但是,当使用 64 位变体时,出现链接错误

> cl -Zi -fsanitize=address -MD clang_rt.asan_dynamic-x86_64.lib xx.c
Microsoft (R) C/C++ Optimizing Compiler Version 19.28.29336 for x64
Copyright (C) Microsoft Corporation.  All rights reserved.

xx.c
Microsoft (R) Incremental Linker Version 14.28.29336.0
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:xx.exe
/debug
clang_rt.asan_dynamic-x86_64.lib
xx.obj
xx.obj : error LNK2019: unresolved external symbol __asan_shadow_memory_dynamic_address referenced in function main
xx.exe : fatal error LNK1120: 1 unresolved externals

clang_rt.asan_dynamic-x86_64.libdumpbin 中查找缺少的符号。 请注意,在两种体系结构上,示例的静态链接(没有 _dynamic 库)都可以工作,但由于更大的依赖性(Qt dll),我需要动态链接。 有人已经偶然发现了吗?

问候,狮子座

原来我还需要 另一个 link 64 位库 clang_rt.asan_dynamic_runtime_thunk-x86_64.lib

cl -MD -fsanitize=address clang_rt.asan_dynamic-x86_64.lib clang_rt.asan_dynamic_runtime_thunk-x86_64.lib xx.c

link正确运行程序并在启动程序后出现消毒剂错误。

页面 https://devblogs.microsoft.com/cppblog/asan-for-windows-x64-and-debug-build-support/ 有一个很好的 table,它列举了所有不同的构建模型以及需要哪些 asan 库。