web-dev-qa-db-fra.com

Comment utiliser AddressSanitizer dans gcc?

J'essaye de construire mon projet avec

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

mais obtenez beaucoup d'erreurs comme:

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

Comment compiler un projet avec le support AddressSanitize?

Ma version de gcc est 4.8.4.

34
mrgloom

Vous devez ajouter le commutateur -lasan sur votre ligne de commande compile/link pour lier la bonne bibliothèque.

6
Smeeheey

Vous devez ajouter -fsanitize=address Aux drapeaux du compilateur (CFLAGS, CXXFLAGS) et aux drapeaux de l'éditeur de liens (LDFLAGS). Vous l'avez probablement ajouté à vos indicateurs de compilateur uniquement.

Notez que l’utilisation explicite de l’option -lasan A été largement découragée par les développeurs ASan (par exemple, ici ), car elle omet d’autres drapeaux importants de l’éditeur de liens. La seule façon recommandée de créer un lien consiste à utiliser -fsanitize=address.

En guise de remarque, pour vérifier plus en profondeur les indicateurs de vérification, consultez FAQ Asan (recherchez "des diagnostics plus agressifs").

57
yugr

Assurez-vous que libasan est installé. Par exemple, dans Fedora:

dnf install libasan libasan-static

4
Jonny