所以我试图在一个大的代码库中识别一些内存损坏问题。我首先构建了代码库,因为它使用了已经设置好的任何现有makefile配置。(如果有什么不同的话,也试过用-lasan)在链接标志中用ASan编译代码库。但是现在我在链接时得到了多个声明错误。我在这一点上毫无头绪。这是什么原因呢?如果有多个定义,那么在没有ASan标志的情况下构建时不也应该弹出同样的错误吗?我甚至在ASan文档中找不到任何与此相关的内容。
我不能分享确切的错误跟踪,但它看起来很像这样:
path/to/file/hdr.h:132: multiple definition of `myDataTable_type'
path/to/file/hdr.h:132: first defined here
path/to/obj/file/obj.o: multiple definition of `__odr_asan.myDataTable_type'
gcc --版本gcc(GCC)8.4.1 20200928(红帽8.4.1-1)
1条答案
按热度按时间nhaq1z211#
很有可能你有这样的东西
在其中一个标头中。当此标头包含在多个源文件中时,您将在
-fno-common
下得到多个定义错误。要解决此问题,您可以从
CFLAGS
中删除-fno-common
,但这样Asan将无法检测到某些静态数组中的缓冲区溢出。更好的方法是,通过将头中的声明更改为并添加了
到其中一个源文件(以保证单一定义)。