2016-06-22 11 views
18

Tôi đang cố gắng để xây dựng dự án của tôi vớiCách sử dụng AddressSanitizer trong gcc?

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

nhưng nhận được rất nhiều lỗi như:

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

Làm thế nào để lập dự án với AddressSanitize hỗ trợ?

gcc -v

phiên bản gcc 4.8.4

+4

Đó không phải là dòng biên dịch hoàn chỉnh vì bạn không có tên tệp. Bạn đã biên dịch/liên kết trong các bước riêng biệt? Bạn cũng quên đề cập đến phiên bản gcc bạn đang sử dụng ... –

Trả lời

4

Bạn cần phải thêm công tắc -lasan vào dòng lệnh biên dịch/liên kết của bạn để liên kết các thư viện đúng.

20

Bạn cần thêm -fsanitize=address vào cả hai cờ trình biên dịch (CFLAGS, CXXFLAGS) và cờ liên kết (LDFLAGS). Bạn đã có thể thêm nó vào cờ biên dịch của bạn chỉ.

Lưu ý rằng thay vì liên kết rõ ràng với -lasan, cách kinh điển là thêm -fsanitize=address vào cờ liên kết của bạn. Sử dụng -lasan đã bị các nhà phát triển ASan khuyến khích rộng rãi.

+0

Nếu tôi bỏ qua '-lasan', Im nhận' tham chiếu không xác định đến __asan _... ' – HeinrichStack

+0

@HeinrichStack Thật khó để nhận xét mà không cần repro. Lưu ý rằng '-fsanitize = address' tương đương với' -lasan' + một số nội dung khác. – yugr

Các vấn đề liên quan