如何摆脱GCC提供的自动添加库?

如何摆脱GCC提供的自动添加库?,gcc,linker,ubsan,Gcc,Linker,Ubsan,我正在用gcc编译main.c文件,并启用了sanitizer选项 因此,链接器命令在其参数列表中包含“-lubsan”选项 需要说明的是,我没有明确地向gcc提供“-lubsan”选项 此外,我反对使用它 因此,问题是: “如何摆脱这种自动添加的选项 是否可以在不分离编译命令和链接命令的情况下执行此操作?” main.c文件的内容: int main() { volatile int a=0x7fffffff; a = a<<1; return a; }

我正在用gcc编译main.c文件,并启用了sanitizer选项

因此,链接器命令在其参数列表中包含“-lubsan”选项

需要说明的是,我没有明确地向gcc提供“-lubsan”选项

此外,我反对使用它

因此,问题是: “如何摆脱这种自动添加的选项

是否可以在不分离编译命令和链接命令的情况下执行此操作?”

main.c文件的内容:

int main()
{
    volatile int a=0x7fffffff;
    a = a<<1;
    return a;
}
附言。 如果要使用“-nostdlib”选项,则不会添加“-lubsan”,但我确实需要“stdlib”


我不需要自动添加“-lubsan”。

那么就不要使用消毒剂。@MaximeGroushkin我应该使用它。UBSan运行库包含执行UBSan初始化、错误报告等的代码。没有它,您不能使用UBSan(除非您计划在程序中重新实现libubsan函数)。@yugr感谢您的评论。我确实需要使用我的处理函数。@lollol在这种情况下(无法使用
-nostlib
但需要禁用libubsan),您唯一的选择是显式调用
ld
。或者可以保留libubsan,但实现自定义处理程序(它们将覆盖libubsan中的处理程序)。
#!/bin/bash
gcc \
-fsanitize=shift \
main.c \
-o \
main \
-### \
2>&1 \
| \
grep ubsan