Instalando a biblioteca compartilhada - perguntas e problemas

3

Estou tendo problemas para "instalar" uma biblioteca compartilhada que eu baixo on-line. O nome da biblioteca é acesso em tempo de execução (http://www.runtimeaccess.com/). No guia de início rápido, eles explicam como usar a biblioteca usando -L ao compilar para definir o local da biblioteca e exportar a variável env LD_LIBRARY_PATH após adicionar o caminho do diretório da biblioteca. Primeiro de tudo, por que você precisa definir a localização do lib duas vezes? usando -L e variável LD_Library_PATH env?

Segunda parte. Eu estou tentando evitar passar esses argumentos e também evitar a modificação do env LD_LIBRARY_PATH, então tudo que eu tenho que fazer é compilar da seguinte forma:

$ gcc myapp.c -lrtadb

então eu gostaria de incluir o lib como parte do sistema lib. Então, copiei toda a pasta rta-0.8.1 para /usr/local/lib/rta-0.8.1 e, em seguida, adicionei um arquivo /etc/ld.conf.d/rtadb.conf contendo o caminho do diretório da biblioteca /usr/local/lib/rta-0.8.1/src lá.

$ cat /etc/ld.so.conf.d/rtadb.conf 
#rta (run time access) lib
/usr/local/lib/rta-0.8.1/src

e depois corri sudo ldconfig para atualizar a lista de bibliotecas compartilhadas - mas sem sorte. Quando tento compilar meu código, a biblioteca não é encontrada:

$gcc myappdb.c -lrtadb
/usr/bin/ld: cannot find -lrtadb
collect2: ld returned 1 exit status

O que estou fazendo de errado aqui?

aqui está a lista de arquivos em /usr/local/lib/rta-0.8.1/src

user@ubuntu:/usr/local/lib/rta-0.8.1/src$ ls -l
total 724
-rw-r--r-- 1 root root  24994 2012-11-14 10:49 api.c
-rw-r--r-- 1 root root  26132 2012-11-14 11:07 api.o
-rw-r--r-- 1 root root  62634 2012-11-14 10:49 do_sql.c
-rw-r--r-- 1 root root   5419 2012-11-14 10:49 do_sql.h
-rw-r--r-- 1 root root  41184 2012-11-14 11:07 do_sql.o
-rw-r--r-- 1 root root 149186 2012-11-14 11:07 librtadb.a
lrwxrwxrwx 1 root root     15 2012-11-14 11:07 librtadb.so -> librtadb.so.3.0
lrwxrwxrwx 1 root root     15 2012-11-14 11:07 librtadb.so.3 -> librtadb.so.3.0
-rwxr-xr-x 1 root root 117749 2012-11-14 11:07 librtadb.so.3.0
-rw-r--r-- 1 root root   2387 2012-11-14 10:49 Makefile
-rw-r--r-- 1 root root  10962 2012-11-14 11:07 parse.output
-rw-r--r-- 1 root root  21929 2012-11-14 11:07 parse.tab.c
-rw-r--r-- 1 root root    425 2012-11-14 11:07 parse.tab.h
-rw-r--r-- 1 root root  25064 2012-11-14 11:07 parse.tab.o
-rw-r--r-- 1 root root   6711 2012-11-14 10:49 parse.y
-rw-r--r-- 1 root root  46636 2012-11-14 10:49 rta.h
-rw-r--r-- 1 root root  31551 2012-11-14 10:49 rtatables.c
-rw-r--r-- 1 root root  17028 2012-11-14 11:07 rtatables.o
-rw-r--r-- 1 root root  58843 2012-11-14 11:07 token.c
-rw-r--r-- 1 root root   6291 2012-11-14 10:49 token.l
-rw-r--r-- 1 root root  37996 2012-11-14 11:07 token.o

btw, estou executando o Ubuntu 10.04 LTS

obrigado.

edit: se o seu novo para esta informação, leia o link abaixo: link

    
por ArmenB 14.11.2012 / 20:26

1 resposta

3

Você precisa dizer ao ld onde procurar pela biblioteca, já que ela não está em um dos diretórios padrão. Como o vinculador é chamado por gcc , use a opção -L do último.

gcc -lrtadb -L/usr/local/lib/rta-0.8.1/src

deve fazer no seu caso.

    
por 14.11.2012 / 22:18