c++ gcc memory-leaks g++ address-sanitizer

c++ - ¿Cómo usar AddressSanitizer en gcc?



memory-leaks g++ (3)

Estoy tratando de construir mi proyecto con

g++ -O0 -g -fsanitize=address -fno-omit-frame-pointer

Pero consigue muchos errores como:

/home/user/libs/opencv/include/opencv2/core/mat.hpp:715: undefined reference to `__asan_report_load8''

¿Cómo compilar un proyecto con el soporte de AddressSanitize?

gcc -v

versión gcc 4.8.4


Asegúrate de tener libasan instalado. Por ejemplo, en Fedora:

dnf install libasan libasan-static


-fsanitize=address agregar -fsanitize=address a los indicadores del compilador ( CFLAGS , CXXFLAGS ) y los indicadores del vinculador ( LDFLAGS ). Probablemente lo haya agregado solo a las banderas de su compilador.

Tenga en cuenta que el uso de enlaces explícitos de la biblioteca -lasan ha sido ampliamente desaconsejado por los desarrolladores de ASan (p. Ej., here ), ya que pierde algunas otras opciones importantes. La única forma recomendada de vincular es usar -fsanitize=address .

Como nota al margen, para obtener indicadores de verificación más agresivos, consulte las Preguntas frecuentes de Asan .


-lasan agregar el -lasan a la línea de comandos de compilación / enlace para vincular la biblioteca correcta.