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.
Sie müssen den Schalter -lasan
Zu Ihrer Compile/Link-Befehlszeile hinzufügen, um die richtige Bibliothek zu verknüpfen.
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").
Stellen Sie sicher, dass Sie libasan installiert haben. Zum Beispiel in Fedora:
dnf install libasan libasan-static