私はCで書かれたプログラムに取り組んでいます。時々、アドレスサニタイザーを使ってビルドします。基本的にバグを捕まえるためです。プログラムは、誰がビルドしたのか、それがビルドされているのか、コンパイラなのかなどの情報で起動するとログにバナーを表示します。もしもバイナリがアドレスサニタイザを使ってビルドされていれば、 。私は__has_feature(address_sanitizer)があることを知っていますが、それはclangのためだけに機能します。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;
}
gcc -Wall -g -fsanitize=address -o asan asan.c
を構築する場合、この利回り:私は、次の簡単なプログラムを試してみましたclang -Wall -g -fsanitize=address -o asan asan.c
で
We got nothing!
は私が手:
We has ASAN!
は__has_featureするためのgcc相当するものはありますか?
私は、アドレスサニタイザーで構築されたプログラムの巨大なVSZ値のように、コンパイル時の定義や何かがあるかどうか疑問に思う方法があることを知っています。
バグがあるようです:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60512 – dragosht