Какой пакет мне нужен для использования clang с asan для 32 бит?
Я получаю эту ошибку при компиляции с clang++
а также -fsanitize=address -m32
:
/usr/bin/ld: cannot find /usr/lib/llvm-3.6/bin/../lib/clang/3.6.0/lib/linux/libclang_rt.asan-i386.a: No such file or directory
/usr/bin/ld: cannot find /usr/lib/llvm-3.6/bin/../lib/clang/3.6.0/lib/linux/libclang_rt.asan_cxx-i386.a: No such file or directory
Какой пакет мне нужен? Я уже пробовал с libclang-3.6-dev
Я также получил ошибку для clang 3.7
с -m64
:
/usr/bin/ld: cannot find /usr/lib/llvm-3.7/bin/../lib/clang/3.7.1/lib/linux/libclang_rt.asan-x86_64.a: No such file or directory
/usr/bin/ld: cannot find /usr/lib/llvm-3.7/bin/../lib/clang/3.7.1/lib/linux/libclang_rt.asan_cxx-x86_64.a: No such file or directory
-m64
ошибка для clang 3.7 (и 3.8) происходит только на travis-ci - это означает, что у меня нет проблем с 3.4/3.5/3.6.
2 ответа
Как уже говорили другие, это ошибка в том, что clang-3.7 и clang-3.8 были упакованы: https://llvm.org/bugs/show_bug.cgi?id=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