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.