[Resolvido]Como fazer ligação dinâmica local (.SO no diretório do executável) ??

Iniciado por juniorssa, 17 de Abril de 2011, 03:49

tópico anterior - próximo tópico

juniorssa

E aê galera estou fazendo um programa em C que usa uma biblioteca dinâmica (LAME codec pra mp3), só que eu queria gerar o executável que utiliza-se a biblioteca (libmp3lame.so) de seu diretório, algo assim:
.../executavel
.../src/executavel.c
.../lib/lame.h
.../lib/libmp3lame.so

Objetivo: Eu quero poder rodar o programa sem precisar instalar o LAME no sistema

Eu já fiz um programa pra testar o codec, está funcionando( ;D)... só que eu tive que instalar o LAME, ou seja, pra compilar/executar ele utiliza o "/usr/include/lame.h" e o "/usr/lib/libmp3lame.so.0".
O comando pra linkar ficou:
gcc  -o"testelame"  ./testelame.o   -lmp3lame

Eu tentei usar o parâmetro -L mostrando o caminho pra "libmp3lame.so". Em uma VM sem instalar o LAME, funcionou pra compilar mas na hora de executar diz que não encontra a biblioteca  :-[

Então como faço pra rodar meu programa usando a biblioteca no diretório do executável e não instalada no sistema???

Curiosidade: não tenho muito conhecimento em Linux e (muito menos)³ em C  >:( ... literalmente tive dor de cabeça pra compilar até descobrir que precisava usar "-lmp3lame" foi aí que percebi que precisava entender o processo de compilação e peço: caso alguém tenha uma manual (preferencialmente em PT) de como usar o GCC com exemplos me passa-se o link!

juniorssa

[RESOLVIDO]
Opá!! Resolvi tentar com o Netbeans e lá encontrei uma opção em Propriedades do projeto chamada: "Diretórios de pesquisa em tempo de execução (-R)"  :o... me chamando a atenção fiz uma pesquisa na net e achei a resposta pra meu problema, que é:

Usar -Wl,-rpath <diretorio-de-biblioteca>, assim passei o diretório relativo!  8)

O comando pra linkar ficou:
gcc  -o executalvel   src/executavel.o   -Wl,-rpath ./lib   lib/libmp3lame.so

Resultado: Funcionou e ficando como eu queria:
.../executavel
.../src/executavel.o        (pode apagar)
.../lib/libmp3lame.so.0    (tem que ter esse ".0"!  ???)

Testes:
- Colocando o executavel junto com a pasta lib em outras locais [funcionou]
- Mudando nome da pasta lib e/ou mudando nome da biblioteca [como esperado não funcionou]