2016-06-22 13 views
18

usiłuję zbudować mojego projektu zJak korzystać z AddressSanitizer w gcc?

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

ale dostać wiele błędów, takich jak:

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

Jak skompilować projekt przy wsparciu AddressSanitize?

gcc -v

wersja gcc 4.8.4

+4

To nie jest kompletna linia kompilacji, ponieważ nie masz nazwy pliku. Czy kompilowałeś/łączyłeś w oddzielnych krokach? Zapomniałeś też o wersji gcc, której używasz ... –

Odpowiedz

4

Trzeba dodać przełącznik -lasan do linii poleceń kompilacji/link połączyć poprawną bibliotekę.

20

Należy dodać -fsanitize=address do obu flag kompilatora (CFLAGS, CXXFLAGS) i flag łącznika (LDFLAGS). Prawdopodobnie dodano ją tylko do flag kompilatora.

Pamiętaj, że zamiast prostego łączenia z -lasan, kanoniczny sposób polega na dodaniu -fsanitize=address do flag łącznika. Używanie -lasan zostało odradzane przez twórców ASan.

+0

Jeśli pominę '-lasan', otrzymuję' niezdefiniowane odniesienie do __asan _... ' – HeinrichStack

+0

@HeinrichStack Trudno jest komentować bez repro. Zauważ, że '-fsanitize = address' jest równoważne' -lasan' + innym rzeczy. – yugr