2016-06-22 69 views
18

Sto cercando di costruire il mio progetto conCome utilizzare AddressSanitizer in gcc?

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

ma ottenere un sacco di errori come:

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

come compilare progetto con AddressSanitize supporto?

gcc -v

versione di gcc 4.8.4

+4

Questa non è la riga di compilazione completa, poiché non si ha il nome del file. Hai compilato/link in passaggi separati? Hai anche dimenticato di menzionare la versione di gcc che stai utilizzando ... –

risposta

4

È necessario aggiungere l'interruttore -lasan alla riga di comando di compilazione/link per collegare la libreria corretta.

20

È necessario aggiungere -fsanitize=address a entrambi i flag del compilatore (CFLAGS, CXXFLAGS) e ai flag del linker (LDFLAGS). Probabilmente lo hai aggiunto solo alle tue bandiere del compilatore.

Nota che, piuttosto che il collegamento esplicito con -lasan, il modo canonico è aggiungere -fsanitize=address ai flag del linker. L'utilizzo di -lasan è stato ampiamente scoraggiato dagli sviluppatori ASan.

+0

Se ignoro '-lasan', Im ottenendo' riferimento non definito a __asan _... ' – HeinrichStack

+0

@HeinrichStack È difficile commentare senza repro. Si noti che '-fsanitize = address' è equivalente a' -lasan' + alcune altre cose. – yugr