微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows 上的 VC2019 地址清理程序 64 位链接错误“未解析的外部符号 __asan_shadow_memory_dynamic_address”

如何解决Windows 上的 VC2019 地址清理程序 64 位链接错误“未解析的外部符号 __asan_shadow_memory_dynamic_address”

下面的简单程序

#include <malloc.h>
int main(int argc,char **argv)
{
    char* arr=malloc(10);
    arr[10]='\0';
    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),我需要动态链接。 有人已经偶然发现了吗?

问候,利奥

解决方法

结果我需要另一个 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

正确链接程序并在启动程序后出现消毒剂错误。

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。