Обходной путь для clang-3.7 отсутствует ошибка Асана
Существует известная ошибка, связанная с тем фактом, что пакеты Debian libclang, по-видимому, компилируются с помощью автоинструментов, но только сборка библиотеки cmake создает библиотеку для дезинфицирующих средств.
Ошибка влияет на libclang-common-3.7. Это приводит к ошибкам ссылки, таким как
/usr/bin/ld.gold: error: cannot open /usr/lib/llvm-3.7/bin/../lib/clang/3.7.0/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory
/usr/bin/ld.gold: error: cannot open /usr/lib/llvm-3.7/bin/../lib/clang/3.7.0/lib/linux/libclang_rt.asan_cxx-x86_64.a: No such file or directory
error: undefined reference to '__asan_option_detect_stack_use_after_return'
error: undefined reference to '__asan_stack_malloc_5'
error: undefined reference to '__asan_report_load4'
error: undefined reference to '__asan_report_load8'
error: undefined reference to '__asan_report_load8'
error: undefined reference to '__asan_handle_no_return'
error: undefined reference to '__asan_report_store_n'
...
Я просто хочу знать, как люди работают над этим.
Для меня это огромная сделка. Я удивлен, что эта ошибка не исправлена в течение многих месяцев, и, кажется, не было много шума об этом.
2 ответа
Мой обходной путь - использовать пакеты Clang 3.6. Если вам действительно требуется 3.7, вам нужно собрать его из исходного кода.
Хорошей новостью является то, что она была признана ошибкой с высоким приоритетом (см. Ошибку 22757).
Я также удивлен тем, как долго эта ошибка была вокруг. Я думаю, что на самом деле это уже исправлено, но, похоже, не планируется обновлять старые пакеты. К счастью, оказывается, что исправить поврежденные пакеты после установки довольно просто. Вам просто нужно скачать правильные библиотеки и поместить их в правильный каталог.
Сначала перейдите на http://llvm.org/releases/download.html и найдите подходящую версию. Я использую 64-битную Ubuntu 14.04, поэтому для исправления clang-3.8 я хочу "Clang для x86_64 Ubuntu 14.04". Загрузите напрямую или скопируйте правой кнопкой мыши и "Скопируйте адрес ссылки" и используйте wget:
wget http://llvm.org/releases/3.8.0/clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz
Распаковка:
tar -xf clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz
Затем скопируйте файлы библиотеки (используя -n, чтобы избежать перезаписи существующих файлов):
sudo cp -n clang+llvm-3.8.0-x86_64-linux-gnu/lib/clang/3.8.0/lib/linux/*.a /usr/lib/llvm-3.8/lib/clang/3.8.0/lib/linux/
При желании повторите для любых старых версий clang, которые вы установили, хотя учтите, что если вы используете ядро Linux более поздней версии, чем 4.1, с версией clang более ранней, чем 3.8, вы можете столкнуться с другой ошибкой с -fsanitize = memory: https://llvm.org/bugs/show_bug.cgi?id=24155