web-dev-qa-db-ja.com

gccでAddressSanitizerを使用する方法は?

私は私のプロジェクトを構築しようとしています

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

ただし、次のような多くのエラーが発生します。

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

AddressSanitizeサポートを使用してプロジェクトをコンパイルする方法は?

私のgccバージョンは4.8.4です。

34
mrgloom

スイッチを追加する必要があります-lasanをコンパイル/リンクコマンドラインに入力して、正しいライブラリをリンクします。

6
Smeeheey

-fsanitize=addressをコンパイラフラグ(CFLAGSCXXFLAGS)とリンカーフラグ(LDFLAGS)の両方に追加する必要があります。おそらくコンパイラフラグにのみ追加しました。

明示的な-lasanオプションを使用することは、他の重要なリンカーフラグを見逃しているため、ASan開発者によって広く推奨されていないことに注意してください(例 here )。リンクする唯一の推奨される方法は、-fsanitize=addressを使用することです。

サイドノートとして、より積極的な検証フラグをチェックするために Asan FAQ (「より積極的な診断」を探してください)。

57
yugr

Libasanがインストールされていることを確認してください。たとえば、Fedoraの場合:

dnf install libasan libasan-static

4
Jonny