Pular para o conteúdo

Linkagem C++

Responder tópico
  • Denunciar
  • Indicar
01 02

13. Re: Linkagem C++

Enviado em 26/11/2010 - 18:18h

uhuahshuah... tbem ri aqui :)

Cara, mas a questão é que há alguns métodos que não podem ser linkados estáticos (getpwnam, por exemplo).

Como podem ver, meu problema é cheio de restrições. Após pensar muuuuito sobre o assunto, vi que o melhor seria linkar as minhas versões de bibliotecas. Logo, criei uma pasta libs/ com as versões certinhas das bibliotecas que preciso. Só preciso fazer com que a p.... do g++ use elas ao invés das do sistema.

A pergunta que não quer calar é: como faço para o meu executável usar as bibliotecas que estão na minha pasta libs e, caso não as encontre lá, procure no sistema?

Responder tópico

17. Re: Linkagem C++

Enviado em 26/11/2010 - 18:45h

Pessoal, agradeço a todas as respostas enviadas.

Tenho vários links para ler e podem ter certeza que lerei todos.

Assim que tiver uma solução ou alguma resposta interessante, posto aqui!

Abraço a todos!

18. Re: Linkagem C++

Enviado em 26/11/2010 - 19:19h

já tentou -I/lugar/onde/está/a/lib ?

19. Re: Linkagem C++

Enviado em 26/11/2010 - 20:03h

pelo que eu entendi, você quer usar uma libc e/ou outra lib do sistema que não a padrão, é isso?
se sim, use -nostdlib e indique o caminho da libc em questão:

g++ blablabla -nostdlib -L/caminho/para/sua/libc

20. Re: Linkagem C++

Enviado em 30/11/2010 - 12:20h

Mslomp!

É exatamente isso que estava procurando!

Olhe o que fiz:
1) Compilei o código de forma dinâmica e dei um ldd para ver as libs que ele linka;
2) Copiei essas libs para um diretório meu chamado libs/
3) g++ -nostdlib -o meu_exe codigo_fonte.cpp libs/lib1.so.1 libs/lib5.so.6 .............. (traduzindo, coloquei o caminho relativo de todas as libs no final da linha de compilação)

Porém, quando compilo desse forma, ocorre o seguinte erro:

/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 000000000804b168
/tmp/ccwGFI2K.o: In function `__static_initialization_and_destruction_0(int, int)':
codigo_fonte.cpp:(.text+0x34f2e): undefined reference to `__dso_handle'
codigo_fonte.cpp.cpp:(.text+0x34f7c): undefined reference to `__dso_handle'
codigo_fonte.cpp.cpp:(.text+0x34fe7): undefined reference to `__dso_handle'
codigo_fonte.cpp.cpp:(.text+0x3504c): undefined reference to `__dso_handle'
codigo_fonte.cpp.cpp:(.text+0x350ce): undefined reference to `__dso_handle'
/tmp/ccwGFI2K.o:codigo_fonte.cpp.cpp:(.text+0x35150): more undefined references to `__dso_handle' follow
collect2: ld returned 1 exit status
make: *** [all] Error 1

Será que é alguma lib que eu esqueci de linkar??

Desde já, muitíssimo obrigado pela ajuda de todos!

21. Re: Linkagem C++

Enviado em 30/11/2010 - 12:43h

Pessoal, descobri nesse topico uma forma facil de resolver esse problema:

http://gcc.gnu.org/ml/gcc-help/2008-07/msg00238.html

Usando as diretivas "-Wl,-rpath=/home/libs/" ele utiliza as libs que estão em /home/libs/ ao invés das que estão instaladas no sistema.

Porém, há uma biblioteca que, mesmo estando dentro de /home/libs/, ele insiste em linkar com a que está em /lib/.
A biblioteca é a ld-linux.so.2. E é exatamente essa bibliteca que dá problema quando copio meu executável + libs para outra distro. Ele usa a do sistema ao invés da minha particular e, como as versões estão beeem distintas uma da outra, o seguinte erro ocorre:

relocation error: /home/libs/libc.so.6: symbol _dl_tls_get_addr_soft, version GLIBC_PRIVATE not defined in file ld-linux.so.6 with link time reference

Vou ver se acho uma solução, mas a maior parte do problema está resolvida \o/\o/\o/\o/\o/\o/
01 02

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder