How to use gcc with sanitizers in Void Linux?
Kewen.Lin
linkw@linux.ibm.com
Thu Dec 26 10:01:00 GMT 2019
Hi Nan,
on 2019/12/26 ä¸å4:48, Nan Xiao wrote:
> Hi gcc community,
>
> Greetings from me!
>
> I am using Void Linux, and want to use sanitizers. Using clang to
> compile code, it is OK:
>
> $ clang -std=c11 -fsanitize=address test.c
> $
>
> While gcc reports following errors:
>
> $ gcc -std=c11 -fsanitize=address test.c
> /usr/bin/ld: cannot find libasan_preinit.o: No such file or directory
> /usr/bin/ld: cannot find -lasan
> collect2: error: ld returned 1 exit status
>
May I suggest you checking your gcc whether disabled libsanitizer support?
GCC configuration allows you to build one gcc without libsanitizer support
with --disable-libsanitizer. "gcc -v" can show the configuration options.
> I check the program compiled with clang:
>
> $ ldd a.out
> linux-vdso.so.1 (0x00007fffd858a000)
> libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007fc1659b8000)
> librt.so.1 => /usr/lib/librt.so.1 (0x00007fc1659ad000)
> libm.so.6 => /usr/lib/libm.so.6 (0x00007fc165868000)
> libdl.so.2 => /usr/lib/libdl.so.2 (0x00007fc165863000)
> libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007fc165849000)
> libc.so.6 => /usr/lib/libc.so.6 (0x00007fc165686000)
> /lib64/ld-linux-x86-64.so.2 => /lib/ld-linux-x86-64.so.2 (0x00007fc1659e0000)
>
See https://github.com/google/sanitizers/wiki/AddressSanitizerAsDso
I guess your clang was configured as static asan library by default.
So it's linked with static library, you can't find libasan.so with ldd.
> No asan library is required.
>
It requires static library. By the way, for gcc you can link with static library
via gcc option -static-libasan.
BR,
Kewen
More information about the Gcc-help
mailing list