web-dev-qa-db-de.com

Wie benutzt man AddressSanitizer in gcc?

Ich versuche mein Projekt mit aufzubauen

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

aber bekomme viele Fehler wie:

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

Wie kompiliere ich ein Projekt mit AddressSanitize-Unterstützung?

Meine gcc-Version ist 4.8.4.

34
mrgloom

Sie müssen den Schalter -lasan Zu Ihrer Compile/Link-Befehlszeile hinzufügen, um die richtige Bibliothek zu verknüpfen.

6
Smeeheey

Sie müssen -fsanitize=address Sowohl Compiler-Flags (CFLAGS, CXXFLAGS) als auch Linker-Flags (LDFLAGS) hinzufügen. Sie haben es wahrscheinlich nur zu Ihren Compiler-Flags hinzugefügt.

Beachten Sie, dass die Verwendung der expliziten Option -lasan Von ASan-Entwicklern weitgehend abgelehnt wurde (z. B. hier ), da einige andere wichtige Linker-Flags fehlen. Die einzige empfohlene Methode zum Verknüpfen ist die Verwendung von -fsanitize=address.

Als Randnotiz, für aggressivere Überprüfungskennzeichen, überprüfen Sie Asan FAQ (suchen Sie nach "aggressiveren Diagnosen").

57
yugr

Stellen Sie sicher, dass Sie libasan installiert haben. Zum Beispiel in Fedora:

dnf install libasan libasan-static

4
Jonny