如何停止使用 AddressSanitizer?

Bri*_*son 1 c gcc address-sanitizer

我将在这里受到打击,因为我正在使用我不完全理解的工具,也没有花时间这样做。在这一点上,我只想快速从我的工作中删除不必要的步骤/依赖项。

我在开发过程中使用AddressSanitizer来查找 C 代码中段错误和其他问题的原因。我通过添加-fsanitize=address到我CFLAGS的 Makefile列表中来做到这一点。

现在,解决了所有这些问题后,如果我从编译中删除此标志,我将无法再编译我的代码,并且会出现许多与此问题中描述的错误非常相似的错误...

如何在 GCC 中使用 AddressSanitizer?

~/xxx/util.c:20:对__asan_option_detect_stack_use_after_return' /usr/bin/ld: ~/xxx/util.c:20: undefined reference to __asan_stack_malloc_2' usr/bin/ld 的未定义引用:/xxx/util.c:23:对__asan_report_store8' /usr/bin/ld: /xxx/util.c:40: undefined reference to __asan_report_load8' /usr/bin/ld 的未定义引用:/xxx/util.c:45 :对`__asan_report_load8'的未定义引用/usr/bin/ld:等等。

不同的是我只想正常编译我的代码。在那个问题中,他们建议-lasan在链接/编译步骤中添加一个标志。这似乎不会帮助我停止使用-fsanitize,尽管我可能是错的。显然这里的链接步骤有问题。感觉就像我在某处忘记了一个依赖项,但我不记得这样做了。

我错过了什么?大概是很明显的事情。另外,如果我需要提供有关编译步骤的更多信息,请告诉我。

Ant*_*ala 6

问题很简单:它的工作,-fsanitize=address必须在两者编译和链接命令行。要禁用它,不得在两者中使用它。

您.o的构建目录中必须有旧的目标文件。一种解决方案是使用make clean删除中间文件或目标文件。

如果您没有clean目标,现在是编写它的好时机……或者使用类似的东西,find -name '*.o' -delete或者rm **/*.o如果有幸使用 ZSH。