gcc v4.8.x ajouter des options pour le débogage de votre programme:Comment utiliser le thread-sanitizer de gcc v4.8.1?
-fsanitize = fil
Activer ThreadSanitizer, un détecteur de course de données rapide. Les instructions d'accès à la mémoire seront instrumentées pour détecter les bogues de course de données. Voir http://code.google.com/p/data-race-test/wiki/ThreadSanitizer pour plus de détails.
Ma version gcc sur Fedora 19:
gcc version 4.8.1 20130603 (Red Hat 4.8.1-1) (GCC)
Lien avec mon programme ci-dessous commande (sortie de 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 dit "ne peut pas trouver -ltsan". Où est le libtsan?
J'ai trouvé quelque chose sur http://gcc.gnu.org/gcc-4.8/changes.html:
ThreadSanitizer a été ajouté et peut être activé via -fsanitize = fil. Les instructions seront instrumentées pour détecter les courses de données. Le ThreadSanitizer est disponible sur x86-64 GNU/Linux.
-fsanitize = le thread ne prend en charge que le processeur 64 bits. Mon linux uname -a
sortie est:
Linux hl.zy 3.9.8-300.fc19.i686 # 1 SMP jeu 27 juin 2013 19:40:39 UTC i686 i686 i386 GNU/Linux
Mon processeur est 32bit, ce n'est pas un support! Ai-je raison?
Comme il n'est pas mentionné dans la ligne de commande de lien mais que l'éditeur de liens s'en plaint, les chances sont grandes que votre installation soit en quelque sorte défectueuse. Soit le compilateur n'accepte pas l'option '-fsanitize = thread', soit la librairie devrait être installée quand le reste de GCC a été installé. Avez-vous regardé les notes de mise à jour? Avez-vous vérifié la configuration du compilateur ('gcc -dumpspecs', etc)? –
Je ne suis pas familier avec gcc, ci-dessous est la sortie de "gcc -dumpspecs | grep tsan":% {fsanitize = fil:% {statique-libtsan:% {! Partagé: -Bstatique --whole-archive -ltsan - no-whole-archive -Bdynamic}}% {! static-libtsan: -ltsan}}}}% o – husthl
_ "Ai-je raison?" _ Oui. –