2016-06-22 10 views
18

Ich versuche, mein Projekt mitWie AddressSanitizer in gcc verwenden?

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

aber erhalten viele Fehler zu bauen wie:

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

Wie Projekt mit AddressSanitize Unterstützung zu kompilieren?

gcc -v

gcc Version 4.8.4

+4

Das ist nicht die komplette Kompilierungszeile, da Sie den Dateinamen nicht haben. Haben Sie in separaten Schritten kompiliert/verlinkt? Du hast auch vergessen, die Version von gcc zu erwähnen, die du verwendest ... –

Antwort

4

Sie müssen den Schalter -lasan auf Ihre Kompilierung/link Befehlszeile hinzuzufügen, um die richtige Bibliothek zu verknüpfen.

20

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

Beachten Sie, dass anstelle der expliziten Verknüpfung mit -lasan die kanonische Methode ist, -fsanitize=address zu Ihren Linker-Flags hinzuzufügen. Die Verwendung von -lasan wurde von ASan Entwicklern weitgehend abgelehnt.

+0

Wenn ich das '-lasan' überspringe, bekomme ich 'undefinierten Verweis auf __asan _...' – HeinrichStack

+0

@HeinrichStack Es ist schwer, ohne Repro zu kommentieren. Beachten Sie, dass "-fsanitize = Adresse" äquivalent zu "-lasan" + etwas anderem ist. – yugr