【发布时间】:2017-10-30 17:53:51
【问题描述】:
我正在开发一种产品,该产品由多个相互依赖的 C++ 可执行文件和库组成。我正在使用 GCC 和 -fsanitize-address 构建它们。
据我了解,如果我想将地址清理程序与库一起使用,我必须将其构建为共享对象(这是 GCC 的默认选项)。因此,我认为最好的选择是使用-static-libasan 为可执行文件静态构建地址清理程序,并为库动态构建它。但是,当我这样做时,在构建 C++ 可执行文件之一时出现链接错误:
==10823==Your application is linked against incompatible ASan runtimes
这让我觉得地址清理器的静态和动态版本不能与 GCC 混合,对吗?我在 sanitizers GitHub 页面上找不到任何相关信息。
【问题讨论】:
-
这不是 ASAN 特有的,您永远不会对任何库执行刚才描述的操作。要么只使用共享版本(用于库和可执行文件或仅用于后者),要么只使用静态版本(仅用于可执行文件)。
标签: gcc address-sanitizer