我有一个通过各种配置研究的测试脚本。该脚本测试Undefined Behavior sanitizer (UBsan)的可用性,然后执行构建(如果可用)。这是测试:
$CXX -x c++ -dM -E -fsanitize=undefined -std=c++11 - < /dev/null > /dev/null 2>&1
if [ "$?" -eq "0" ]; then
HAVE_UBSAN=1
else
HAVE_UBSAN=0
fi
上面的测试在Cygwin上设置HAVE_UBSAN=1
,这意味着GCC的Cygwin声称支持UBsan(否则,它会产生错误)。但是,我在Cygwin i686和x86_64下都遇到了链接错误:
...
g++ -DDEBUG -g2 -O2 -Wall -std=c++03 -fsanitize=undefined -march=native -pipe -c fipsalgt.cpp
g++ -DDEBUG -g2 -O2 -Wall -std=c++03 -fsanitize=undefined -march=native -pipe -c dlltest.cpp
g++ -o cryptest.exe -DDEBUG -g2 -O2 -Wall -std=c++03 -fsanitize=undefined -march=native test.o validat1.o validat2.o validat3.o ... ./libcryptopp.a
/usr/lib/gcc/i686-pc-cygwin/4.9.3/../../../../i686-pc-cygwin/bin/ld: cannot find -lubsan
collect2: error: ld returned 1 exit status
GNUmakefile:333: recipe for target 'cryptest.exe' failed
make: *** [cryptest.exe] Error 1
显然,gcc-core
或gcc-g++
未安装任何需要的内容。我再次运行安装程序并搜索 ubsan
,但我获得了0次点击。
Cygwin的UBsan需要哪些套餐?
虽然我很喜欢,但我不妨问下一次我希望遇到的失败。 Cygwin的Asan需要什么包装?
提前致谢。