我可以用makefile中的以下变量成功编译NginxCC = clang-6.0
CFLAGS = -pipe -O -Wall -Wextra -Wpointer-arith -Wconditional-uninitialized -Wno-unused-parameter -Werror -g
尝试使用-fsanitize=fuzzer或-fsanitize=fuzzer no link并将生成文件更改为:CFLAGS = -pipe -fsantizer=fuzzer-no-link -O -Wall -Wextra -Wpointer-arith -Wconditional-uninitialized -Wno-unused-parameter -Werror -g
我有很多未定义的引用__sancov_lowest_stack
和__sanitizer_cov_trace_const_cmp8
我该怎么解决我少了哪些图书馆?
最佳答案
必须在-fsanitize=fuzzer
和CFLAGS
中添加类似LDFLAGS
的消毒剂标志。
如果它们没有传递给链接器,而只是传递给编译器,则会为sanitizer运行时库函数(如您在问题中引用的函数)带来大量未定义的符号错误。
请注意,当使用-fsanitizer=fuzzer
时,将其与肾上腺消毒剂(即-fsanitizer=fuzzer,address
)结合使用是有意义的。
另外,使用libFuzzer,您可以have to provide your own fuzzer callback functionLLVMFuzzerTestOneInput()
并省略一个main()
函数。