Por que eu posso compilar com o libclang-3.5.so e não com o libclang.so?

1

Eu estou tentando compilar um arquivo-fonte C, que precisa ser vinculado a uma biblioteca dinâmica que eu instalei através de apt-get (libclang.so).

apt-get instalou as bibliotecas compartilhadas clang em /usr/lib/x86_64-linux-gnu/ . Aqui estão os arquivos relevantes:

$ ls -l /usr/lib/x86_64-linux-gnu/libclang*
lrwxrwxrwx 1 root root /usr/lib/x86_64-linux-gnu/libclang-3.4.so -> libclang-3.4.so.1
-rw-r--r-- 1 root root /usr/lib/x86_64-linux-gnu/libclang-3.4.so.1
lrwxrwxrwx 1 root root /usr/lib/x86_64-linux-gnu/libclang-3.5.so -> libclang-3.5.so.1
-rw-r--r-- 1 root root /usr/lib/x86_64-linux-gnu/libclang-3.5.so.1
lrwxrwxrwx 1 root root /usr/lib/x86_64-linux-gnu/libclang.so.1 -> libclang-3.5.so.1

O carregador parece saber sobre a libclang:

$ ldconfig -p | grep clang
        libclang.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libclang.so.1

Na verdade, meu problema é reproduzível, não importa qual seja o conteúdo do arquivo de origem que estou tentando compilar, contanto que contenha um código válido. Então, eu usei esse arquivo de origem:

$ cat a.c 
int main(int argc, char** argv) {
  return 0;
}

Compilando contra clangagem:

$ gcc a.c -L/usr/lib/x86_64-linux-gnu -lclang
/usr/bin/ld: cannot find -lclang
collect2: error: ld returned 1 exit status

Mas compilar contra o clang-3.5 (ou o clang-3.4) é bem-sucedido:

$ gcc a.c -L/usr/lib/x86_64-linux-gnu -lclang-3.5
$

Eu realmente preciso ser capaz de vincular usando -lclang e não -lclang-3.5 , porque, na verdade, não posso controlar como essa opção de compilador é gerada em meu problema do mundo real. O que posso fazer para fazer -lclang funcionar?

Estou usando o Ubuntu 14.04 LTS e o GCC 4.8.2.

    
por barjak 31.07.2014 / 22:15

0 respostas