使用 Address Sanitizer 编译程序时出错

Posted

技术标签:

【中文标题】使用 Address Sanitizer 编译程序时出错【英文标题】:Error compiling program with Address Sanitizer 【发布时间】:2017-01-30 18:30:36 【问题描述】:

我正在尝试使用 Address Sanitizer (ASan) 编译程序 (tarantool),但遇到以下错误:

/home/tarantool/src/fiber.c:123:2: error: implicit declaration of function '__sanitizer_start_switch_fiber' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        ASAN_START_SWITCH_FIBER(asan_state, 1,

我无法找出此问题的原因。有人能指出我正确的方向吗?

【问题讨论】:

【参考方案1】:

根据您使用 GCC 的标签。 Fiber 接口仅在 Clang this summer 中实现,并在 November 中合并到尚未发布的 GCC 7。因此,您似乎应该切换到 Clang 或等到 GCC 7 发布(或使用预发布版本)。

作为旁注,您可以将此问题报告给 tarantool 开发人员,以便他们检查编译器版本并以更友好的方式报告错误。

【讨论】:

以上是关于使用 Address Sanitizer 编译程序时出错的主要内容,如果未能解决你的问题,请参考以下文章

检测到错误后,Can Address Sanitizer会立即中止吗?

使用 Address Sanitizer 和 gcc7.1.0 时如何生成核心转储

在Android上使用Address Sanitizer构建但使用CMake

sanitizer 内存泄露检查工具的使用

Address Sanitizer - 我可以在 N 个缺陷后停止吗?

Advanced Debugging and the Address Sanitizer