Я обычно скачиваю последнюю версию clang с их сайта .Это помогает мне использовать последнюю версию C ++, так как это невозможно с помощью gcc.Я просто получаю двоичные файлы для своего Ubuntu / Debian, и я готов к работе.
Для меня соединение с библиотекой tsan
(библиотекой потокового дезинфицирующего средства) никогда не было чем-то простым.Я использую безумные меры в cmake, чтобы заставить его работать.Ранее, когда я использовал gcc из системы, это то, что я делал в cmake, чтобы заставить ссылку работать правильно:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -ltsan")
set(CMAKE_LINK_LIBRARY_FLAG "-ltsan -l")
, которая в основном изменяет флаги связывания, чтобы связать каждую мелочь с tsan
.Некоторое время это работало нормально, но чтобы заставить его работать, я должен использовать gcc, системный компилятор.Если я пытаюсь связать это с помощью clang 7, то при запуске моей программы я получаю ошибку segfault.
Поэтому я искал доступные библиотеки tsan
, которые поставляются с clang, и вот что я нашел:
user@machine:/opt/clang7$ find -iname "*tsan*"
./lib/clang/7.0.0/lib/linux/libclang_rt.tsan_cxx-x86_64.a
./lib/clang/7.0.0/lib/linux/libclang_rt.tsan-x86_64.a
./lib/clang/7.0.0/lib/linux/libclang_rt.tsan_cxx-x86_64.a.syms
./lib/clang/7.0.0/lib/linux/libclang_rt.tsan-x86_64.a.syms
./lib/clang/7.0.0/include/sanitizer/tsan_interface_atomic.h
./lib/clang/7.0.0/include/sanitizer/tsan_interface.h
Кажется, там есть библиотеки цанов.Я полагаю, я должен связаться с ними.Как мне это сделать?
Это, похоже, не работает:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -L/opt/clang7/lib/clang/7.0.0/lib/linux/ -lclang_rt.tsan_cxx-x86_64")
set(CMAKE_LINK_LIBRARY_FLAG "-L/opt/clang7/lib/clang/7.0.0/lib/linux/ -lclang_rt.tsan_cxx-x86_64 -l")
Это тоже не работает:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=thread -l:/opt/clang7/lib/clang/7.0.0/lib/linux/libclang_rt.tsan_cxx-x86_64.a")
set(CMAKE_LINK_LIBRARY_FLAG "-l:/opt/clang7/lib/clang/7.0.0/lib/linux/libclang_rt.tsan_cxx-x86_64.a -l")
Iперепробовал несколько других комбинаций.Но ни один из них, похоже, не работает.Ошибки, которые я получаю, связаны либо с ошибками, либо с неопределенными ссылками на некоторые компоненты tsan.
Как я могу ссылаться на tsan из готовых двоичных файлов новейшего клана?