Pracuję nad programem napisanym w języku C, który czasami buduję z dezynfekcją adresów, głównie po to, aby łapać błędy. Program wypisuje baner w dziennikach, gdy zaczyna się od informacji takich jak: kto go zbudował, oddziału, w którym został zbudowany, kompilator itp. Myślałem, że byłoby miło również przeliterować, jeśli binarny został zbudowany przy użyciu sanityzatora adresów . Wiem, że istnieje __has_feature (address_sanitizer), ale to działa tylko dla clanga. Próbowałem następujący prosty program:Jak wykryć, czy budynek z odkażaczem adresów przy budowaniu z gcc 4.8?
#include <stdio.h>
int main()
{
#if defined(__has_feature)
# if __has_feature(address_sanitizer)
printf ("We has ASAN!\n");
# else
printf ("We have has_feature, no ASAN!\n");
# endif
#else
printf ("We got nothing!\n");
#endif
return 0;
}
Przy budowie z gcc -Wall -g -fsanitize=address -o asan asan.c
, Daje:
We got nothing!
Z clang -Wall -g -fsanitize=address -o asan asan.c
uzyskać:
We has ASAN!
Czy istnieje odpowiednik __has_feature gcc?
Wiem, że istnieją sposoby sprawdzenia, na przykład ogromna wartość VSZ dla programów zbudowanych za pomocą dezynfekcji adresów, tylko zastanawia się, czy istnieje definicja czasu kompilacji lub coś podobnego.
Wygląda na to błąd: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60512 – dragosht