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