C 如何停止使用消毒液?

C 如何停止使用消毒液?,c,gcc,address-sanitizer,C,Gcc,Address Sanitizer,我将在这里受到打击,因为我使用的工具我不完全理解,也没有花时间这样做。此时,我只想从工作中快速删除不必要的步骤/依赖项 在开发过程中,我用它来查找C代码中的SEGFULTS和其他问题的原因。为此,我在Makefile中的cflag列表中添加了-fsanize=address 现在,在修复了所有这些问题之后,如果我从编译中删除这个标志,我就不能再编译我的代码了,并且会出现许多类似于这个问题中描述的错误 ~/xxx/util.c:20:未定义对uu asan\u选项的引用u detect\u sta

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

在开发过程中,我用它来查找C代码中的SEGFULTS和其他问题的原因。为此,我在Makefile中的cflag列表中添加了-fsanize=address

现在,在修复了所有这些问题之后,如果我从编译中删除这个标志,我就不能再编译我的代码了,并且会出现许多类似于这个问题中描述的错误

~/xxx/util.c:20:未定义对uu asan\u选项的引用u detect\u stack\u use\u return'/usr/bin/ld:~/xxx/util.c:20:未定义对u asan\u stack\u malloc\u 2'的引用 usr/bin/ld:/xxx/util.c:23:未定义对“asan报告”的引用/usr/bin/ld:/xxx/util.c:40:未定义对“asan报告”的引用/usr/bin/ld: /xxx/util.c:45:未定义的引用 至“asan报告加载8”/usr/bin/ld: 等等

区别在于我只想正常编译代码。在这个问题上,他们建议在链接/编译步骤中添加一个flag-lasan。这似乎不能帮助我停止使用-fsanize,尽管我可能错了。显然,这里的链接步骤有问题。感觉好像我已经包括了一个我在某处忘记的依赖项,但我不记得曾经这样做过

我错过了什么?可能是显而易见的。另外,如果需要提供有关编译步骤的更多信息,请告诉我

我只想正常编译我的代码

正在删除-fsanize=。。。flag应该做到这一点

您的问题很可能源于更新Makefile时没有重建所有对象,make不会自动知道重建所有对象

运行使清洁;制造或发现-名称“*.o”| xargs rm;make应该能做到这一点

我只想正常编译我的代码

正在删除-fsanize=。。。flag应该做到这一点

您的问题很可能源于更新Makefile时没有重建所有对象,make不会自动知道重建所有对象


运行使清洁;制造或发现-名称“*.o”| xargs rm;make应该可以做到这一点。

问题很简单:为了让它工作,-fsanize=地址必须出现在编译和链接命令行中。若要禁用它,则不能在任何一种情况下使用它

生成目录中必须有旧的.o对象文件。解决方案是使用makeclean删除中间文件或目标文件


如果你没有干净的目标,现在是写它的好时机。。。如果有幸使用ZSH,也可以使用find-name'*.o'-delete或rm**/*.o。问题很简单:要使其工作,-fsanize=address必须出现在编译和链接命令行中。若要禁用它,则不能在任何一种情况下使用它

生成目录中必须有旧的.o对象文件。解决方案是使用makeclean删除中间文件或目标文件


如果你没有干净的目标,现在是写它的好时机。。。或者如果有幸使用ZSH,可以使用find-name'*.o'-delete或rm**/*.o。

注意,可以设置Makefile,以便在Makefile更改时重建所有内容,而OP显然没有这样做。注意,可以设置Makefile,以便在Makefile更改时重建所有内容显然没有这样做