Qual pacote eu preciso usar o clang com asan para 32 bits?

2

Eu recebo este erro ao compilar com clang++ e -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

Qual pacote eu preciso? Eu já tentei com libclang-3.6-dev

Também recebi um erro para clang 3.7 com -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

O erro -m64 para o clang 3.7 (e 3.8) acontece apenas no travis-ci - o que significa que não tenho problemas com 3.4 / 3.5 / 3.6.

    
por onqtam 29.02.2016 / 03:31

2 respostas

2

Como outros já afirmaram, isso é um erro no modo como o clang-3.7 e o clang-3.8 foram empacotados: link

Por sorte, consertar os pacotes quebrados após a instalação não é difícil. Você só precisa baixar as bibliotecas corretas e colocá-las no diretório correto.

Primeiro, vá para o link e encontre a versão correspondente. Eu estou rodando o Ubuntu 14.04 de 64 bits, então para corrigir o clang-3.8 eu quero "Clang for x86_64 Ubuntu 14.04". Faça o download diretamente ou copie o botão direito do mouse e "Copiar endereço do link" e use o wget:

wget http://llvm.org/releases/3.8.0/clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz

Descompacte:

tar -xf clang+llvm-3.8.0-x86_64-linux-gnu-ubuntu-14.04.tar.xz

Copie os arquivos da biblioteca (usando -n para evitar sobrescrever os arquivos existentes):

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/

Se desejar, repita para quaisquer versões antigas do clang que você tenha instalado, mas note que se você estiver usando um kernel Linux mais recente que 4.1 com uma versão anterior a 3.8 você pode encontrar outro bug com -fsanitize = memory: < href="https://llvm.org/bugs/show_bug.cgi?id=24155"> link

    
por Nathan Kurz 13.03.2016 / 01:46
1

aparentemente há um bug que está faltando no bug 3.7 e 3.8.

sobre o problema de 32 bits com o 3.6 - eu acho que preciso de libclang-3.6-dev:i386 e libclang-common-3.6-dev:i386 - não testado ainda - por causa de ISTO

    
por onqtam 11.03.2016 / 07:17