gcc v4.8.x thêm tùy chọn để gỡ lỗi chương trình của bạn:Làm thế nào để sử dụng bộ lọc khử trùng của gcc v4.8.1?
-fsanitize = chủ đề
Enable ThreadSanitizer, một máy dò đua dữ liệu nhanh chóng. Hướng dẫn truy cập bộ nhớ sẽ được thiết lập để phát hiện lỗi chủng tộc dữ liệu. Xem http://code.google.com/p/data-race-test/wiki/ThreadSanitizer để biết thêm chi tiết.
phiên bản My gcc trên Fedora 19:
gcc version 4.8.1 20130603 (Red Hat 4.8.1-1) (GCC)
Liên kết chương trình của tôi với bên dưới lệnh (đầu ra của CMake):
Linking C executable bin/ftu
/usr/bin/cmake -E cmake_link_script CMakeFiles/ftu.dir/link.txt --verbose=1
/usr/bin/cc -g -g -O0 -Wall -D_REENTRANT -rdynamic -fsanitize=thread -fPIE -pie CMakeFiles/ftu.dir/src/main/main.c.o -o bin/ftu -L/home/hl/ftu/arm/src/libapp/pc -rdynamic ../libapp/pc/libbase.a ../libapp/pc/libstbl.a ../libapp/pc/libstbl_utest.a ../libapp/pc/libbase_utest.a ../libapp/pc/libmem_utest.a ../libapp/pc/libmemspy_utest.a ../libapp/pc/libos_utest.a ../libapp/pc/libmain_utest.a ../libapp/pc/liblog_utest.a ../libapp/pc/libini_utest.a ../libapp/pc/libdsp_utest.a ../libapp/pc/libmstation_utest.a ../libapp/pc/libflist_utest.a ../libapp/pc/libdc_utest.a ../libapp/pc/libflist.a ../libapp/pc/libdsp.a ../libapp/pc/liblog.a ../libapp/pc/libini.a ../libapp/pc/libmstation.a ../libapp/pc/libdc.a ../libapp/pc/libmemspy.a ../libapp/pc/libmem.a ../libapp/pc/libos.a ../libapp/pc/libbase.a -lrt -lpopt -lpthread -Wl,-rpath,/home/hl/ftu/arm/src/libapp/pc
/usr/bin/ld: cannot find -ltsan
collect2: error: ld returned 1 exit status
Gcc nói "không thể tìm thấy -ltsan". Libtsan tồn tại ở đâu?
tôi tìm thấy một cái gì đó trên http://gcc.gnu.org/gcc-4.8/changes.html:
ThreadSanitizer đã được thêm vào và có thể được kích hoạt thông qua -fsanitize = chủ đề. Hướng dẫn sẽ được thiết lập để phát hiện các cuộc đua dữ liệu. ThreadSanitizer có sẵn trên x86-64 GNU/Linux.
-fsanitize = thread chỉ hỗ trợ trên CPU 64 bit. My ra linux uname -a
là:
Linux hl.zy 3.9.8-300.fc19.i686 # 1 SMP Thu 27 Tháng sáu 19:40:39 UTC 2013 i686 i686 i386 GNU/Linux
CPU của tôi là 32bit, Nó không hỗ trợ! Tôi có đúng không?
Vì nó không được đề cập trong dòng lệnh liên kết nhưng bị phàn nàn bởi trình liên kết, khả năng cao là cài đặt của bạn bị lỗi. Trình biên dịch không nên chấp nhận tùy chọn '-fsanitize = thread' hoặc thư viện phải được cài đặt khi phần còn lại của GCC được cài đặt. Bạn đã xem ghi chú phát hành chưa? Bạn đã kiểm tra cấu hình trình biên dịch ('gcc -dumpspecs', v.v ...) chưa? –
Tôi không quen thuộc với gcc, dưới đây là đầu ra của "gcc -dumpspecs | grep tsan":% {fsanitize = thread:% {static-libtsan:% {! Được chia sẻ: -Bstatic --whole-archive -ltsan - no-whole-archive -Bdynamic}}% {! static-libtsan: -ltsan}}}}% o – husthl
_ "Tôi có đúng không?" _ Có. –