Logo Hardware.com.br
DigUser
DigUser Super Participante Registrado
592 Mensagens 26 Curtidas

[C++] Bibliotecas dinâmicas no ubuntu 64bits

#1 Por DigUser 17/07/2013 - 13:24
Olá.
Recentemente encontrei o seguinte problema;
[code=rich]
$ ./proxy
bash: ./proxy: No such file or directory
$ ldd proxy
linux-vdso.so.1 => (0x00007fff967fe000)
libboost_system.so.1.54.0 => /usr/local/lib/libboost_system.so.1.54.0 (0x00007f1448b66000)
libboost_thread.so.1.54.0 => /usr/local/lib/libboost_thread.so.1.54.0 (0x00007f144894c000)
libboost_regex.so.1.54.0 => /usr/local/lib/libboost_regex.so.1.54.0 (0x00007f1448655000)
libboost_program_options.so.1.54.0 => /usr/local/lib/libboost_program_options.so.1.54.0 (0x00007f14483ea000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f14480e7000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1447ec9000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1447b01000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f14478eb000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f14476e2000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f14473dd000)
/lib/ld64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x00007f1448d89000)
$ file proxy
proxy: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0x49638c4e0395c7a2ebb74b84f0e8b1fc6e273c45, not stripped
$ uname -a
Linux tungstenio 3.8.0-25-generic #37-Ubuntu SMP Thu Jun 6 20:47:07 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
[/code]Dentre diversos casos que achei na internet, a maioria ocorria pois o sistema é 64bits é o aplicativo é 32bits. O que não ocorre no meu caso.
Também compilei com todas as bibliotecas como estáticas e o programa funcionou.
Descobri, na internet, que isso seria um problema que o kernel está procurando /lib/ld64.so.1 mas esta está em /lib64/ld-linux-x86-64.so.2.
Ao executar
[code=rich]$ /lib64/ld-linux-x86-64.so.2 ./proxy[/code]O programa funcionou. E, após fazer um link simbólico para a tal lib, agora funciona chamando apenas por ./proxy.
[code=rich]$ sudo ln -s /lib64/ld-linux-x86-64.so.2 /lib/ld64.so.1[/code]A pergunta é: Por que foi necessário fazer essa linkagem manualmente? Isso está realmente certo?
bitetti
bitetti Membro Senior Registrado
280 Mensagens 18 Curtidas
#2 Por bitetti
18/07/2013 - 16:44
É um procedimento relativamente padrão com essa mudança de 32 pra 64. Sem falar q tb resolve em alguns casos que podem ocorrer de algum aplicativo instalar num caminho comum a uma distro que foi "ligeiramente" alterado na outra.

É tb usado para resolver conflito de verões.

A linkagem é nativa deste tipo de sistema e muito comum. Até no meu iPod tem um monte de arquivo assim q na verdade esta em outra pasta, mas foi usado um nome mais bonito na estrutura de diretórios.
policia.gif wuebí páge: www.rpgvale.com.br

policia.gif projeto de game: www.wildwitchproject.com

trabalho_duro.gif machine:
Q9300, 8GB DDR2, GeForce XFX 8500GT 512DDR2, ASUS P5K Premium, 2TB HD, Tablet Waccom, Fonte Zalman 460W, Monitor Dell 22", Linux Ubuntu Studio 11.10
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal