Como instalar uma biblioteca compartilhada no Ubuntu? [RESOLVIDO]

1. Como instalar uma biblioteca compartilhada no Ubuntu? [RESOLVIDO]

XDedalo
Kriptos

(usa Ubuntu)

Enviado em 27/05/2015 - 11:50h

Estou aprendendo a programar e tive problemas quando tive de usar uma biblioteca compartilhada. Conseguir compilar e tudo mais, porém não sei como instalar o arquivo .so. Segui um texto que dizia que podia colocar o arquivo .so no diretório usr/lib ou usr/local/lib. Acabei colocando nos dois diretórios (porque não deu certo no primeiro, então tentei no segundo), mas quando vou compilar o programa que usa a biblioteca ocorre o mesmo erro que ocorria antes. Arquivo ou diretório não encontrado. Como faço para instalar uma biblioteca compartilhada? Lembrando que já é um arquivo .so e está tanto em usr/lib como em usr/local/lib, porém é dada como não existente ao tentar compilar um arquivo que a utiliza. Desde já, obrigado.


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/05/2015 - 14:44h

Você não precisa necessariamente instalar a biblioteca junto com outras do sistema. Você pode simplesmente instruir o linker a embutir no executável informação que o faz buscar a biblioteca num diretório específico, e esse local pode ser um caminho fixo ou relativo àquele em que reside o próprio executável.

A opção do linker que faz isso é -rpath. Essa opção recebe um diretório como argumento. O diretório pode ser um caminho completo (por exemplo: /usr/my_test_dir/lib) ou um caminho relativo, usando o símbolo “$ORIGIN”.

# Compila e linka a com biblioteca libxyz.so que reside em /home/paulo/lib
gcc test.c -o test -Wl,-rpath=/home/paulo/lib -L/home/paulo/lib -lxyz

# Idem, mas a biblioteca vai residir no mesmo diretório que o executável.
# Instalar sua aplicação consistirá em colocar biblioteca e executável lado
# a lado.
gcc test.c -o test -Wl,-rpath='$ORIGIN' -L/home/paulo/lib -lxyz

# Idem, mas usando um diretório relativo a onde residir o executável. A
# instalação poderia criar, por exemplo, um diretório X, com um subdiretório
# X/bin para o executável e X/lib para a biblioteca.
gcc test.c -o test -Wl,-rpath='$ORIGIN/../lib' -L/home/paulo/lib -lxyz


Note que -L é usado durante a geração do executável. Em tempo de execução, vale o que for passado a -rpath.

Mas isso é só um outro jeito de fazer. Você poderia também colocar sua biblioteca num diretório X, e acrescentar esse X ao /etc/ld.so.conf (ou em um arquivo novo dentro de /etc/ld.so.conf.d/), e depois chamar ldconfig para regenerar o cache de bibliotecas dinâmicas comuns a todo o sistema, como já sugeriram acima.

3. Re: Como instalar uma biblioteca compartilhada no Ubuntu? [RESOLVIDO]

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 27/05/2015 - 13:15h

Boa tarde.

Qual o nome completo do arquivo .so e como você está compilando o programa?

O que a biblioteca faz? Qual API oferece?

Como você está utilizando a API no seu código?

Você pode postar o código e possivelmente onde encontrou a biblioteca?
Ou o fonte que usou para compilar a biblioteca e a forma que compilou a biblioteca?

Atenciosamente,
Enzo Ferber
[]'s


The generation of random numbers is too important to be left to chance.



4. ld.so.conf

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/05/2015 - 13:37h

Você tem que indicar o diretório das bibliotecas no arquivo /etc/ld.so.conf.

Ou se este arquivo tiver a linha include /etc/ld.so.conf.d/*.conf deve criar um arquivo .conf dentro do diretório /etc/ld.so.conf.d/ com o diretório que contém essa lib.

Agora é só rodar o comando ldconfig como root.

Se você já tiver o diretório anotado em um dos caminhos, então é só rodar o comando.

--
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


5. RE: EnzoFerber

XDedalo
Kriptos

(usa Ubuntu)

Enviado em 28/05/2015 - 13:55h

O nome do arquivo .so é libfreenect_audio.so . Compilei o programa usando gcc record.c -o record, mas apenas para teste e para vê se tinha algum erro (o código está totalmente incompleto, a compilação foi porque já imaginava esse problema com a lib, porque ela não instala-se automaticamente quando instala-se o openkinect, por isso compilei, para já ir corrigindo os erros). Agora tenho que instalar a lib.
Eu compilei a lib usando os comandos gcc -shared -Wl,-soname,libfreenect_audio \
-o libfreenect_audio.so. A biblioteca é para programação e utilização dos microfones do kinect. Link do código da biblioteca https://github.com/OpenKinect/libfreenect/blob/master/include/libfreenect_audio.h . Lembrando que o libfreenect.h, que a biblioteca libfreenect_audio.h utiliza, já está instalado corretamente.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts