Обходной путь для 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

Другие вопросы по тегам