为了更好地防范UB案件,如:
#include <stdio.h>
int f(){
int x;
return x;
}
int main()
{
f();
while(1);
return 0;
}我今天有已更新我的GCC所以我可以用布桑。根据gcc --version的说法,我现在的版本是5.3.0。我以为这个更新会添加ubsan,但似乎并不是因为在用C:\Users\my_name\Desktop>gcc -fsanitize=undefined a.c编译之后,我得到的是:
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe:不能fin d -lubsan
现在,我已经看过这个职位了,但是操作系统是Ubuntu 15.04,我使用Win 8.1,所以这对我没有帮助。这里的一条评论说:
您需要安装libubsan软件包。
但是我不知道它是否是针对windows/ubuntu的,即使它是针对windows用户的,我也不知道该如何做。
编辑:我也尝试过编译gcc -fno-sanitize=all a.c (这里中有很多选项),这个编译没有警告,所以我想GCC不知怎么识别了消毒液(因为它编译好了),但是出于某种原因拒绝了我最初的编译尝试。
发布于 2021-12-28 09:29:24
对于GCC来说,x86_64杀菌剂运行库(包括-lubsan)只支持Linux、OSX、FreeBSD和Solaris (详见https://github.com/gcc-mirror/gcc/blob/master/libsanitizer/configure.tg )。因此,不幸的是,您还不能在Windows上使用UBsan。
https://stackoverflow.com/questions/43995718
复制相似问题