Restaurar /usr/bin/ld

Iniciado por lgoulart, 19 de Dezembro de 2006, 21:48

tópico anterior - próximo tópico

lgoulart

Pessoal,

apesar de ter começado no Ubuntu à 2 dias, já consegui fazer uma besteira mestre !

Eu fui mover um arquivo e acabei sobrescrevendo o arquivo :


sudo mv arquivo /usr/bin/ld

o gcc ao realizar a linkedição passou a acusar falha de segmentação

Um amigo meu que usa Ubuntu tentou me ajudar me enviando o ld da máquina dele mas não funcionou, agora o erro acusado é 'ld' não encontrado

Alguma idéia de como resolver este problema ??

Grato,
Lgoulart

embryo

#1
O ld é instalado pelo pacote binutils. Mas desinstalar e instalar novamente esse pacote seria um tanto problemático, porque você teria que desinstalar também vários outros pacotes que dependem do binutils. Você pode tentar isso:

1 - Veja onde o pacote se encontra nos repositórios:

apt-cache show binutils | grep Filename

Compare com a versão que você está usando:

dpkg -l | grep binutils | head -n 1

Se as versões forem as mesmas, prossiga.

2 - Pegue o endereço do pacote ( aqui no Ubunu Dapper é pool/main/b/binutils/binutils_2.16.1cvs20060117-1ubuntu2.1_i386.deb ) e junte com o endereço do repositório oficial do Ubuntu ( http://archive.ubuntu.com/ubuntu ). Ficaria algo assim: http://archive.ubuntu.com/ubuntu/pool/main/b/binutils/binutils_2.16.1cvs20060117-1ubuntu2.1_i386.deb

3 - Baixe esse arquivo e descompacte ele:

cd /tmp
wget http://archive.ubuntu.com/ubuntu/pool/main/b/binutils/binutils_versão_que_você_está_usando.deb
dpkg -x binutils_versão_que_você_está_usando.deb .


4 - Será criado um diretório chamado usr, com o conteúdo do pacote. Agora copie o ld:

cd usr/bin
sudo cp ld /usr/bin/ld


5 - Veja se funciona :)

Se as vesões não forem iguais no passo 1, então seu sistema não está atualizado. Um simples

sudo apt-get install binutils

deve instalar a versão mais nova do pacote e resolver o seu problema.

lgoulart

 ::) Que alívio. A versão dos dois pacotes era a mesma e o gcc está funcionando corretamente. Muito obrigado embryo !!!!

Só mais uma pergunta: existe uma maneira de descobrir a qual pacote um aplicativo pertence ? Por exemplo, neste caso teria como saber a qual pacote o lb pertence?

Até mais ...

embryo

De nada, cara. Existe sim um jeito de fazer o que vc quer. É o aplicativo apt-file. Você pode instalar ele pelo apt-get mesmo:

sudo apt-get install apt-file

Depois faça:

sudo apt-file update

Essa operação pode demorar um pouco. Quando terminar, é só fazer:

apt-file search nome_do_arquivo

para saber em qual pacote o arquivo está contido. Por exemplo,

apt-file search /usr/bin/gedit

retorna:

gedit: usr/bin/gedit

que significa que para ter o arquivo /usr/bin/gedit, é necessário instalar o pacote chamado gedit.

Esse apt-file é uma ferramenta muito útil, e ao meu ver pouco comentada. Acho que merece um tutorial.

lgoulart

 ;D Funcionou perfeitamente aqui no meu computador !!! Muito obrigado !!!

Xterminator

Aff e ninguém usa a opção reinstall do apt e synaptic? esta opção recolocaria o arquivo original no lugar.
acho que arrumaria o problema, você também poderia pegar o pacote binutils do CD de instalação
abri-lo com o file-roller e copiar o arquivo para o diretório correto, logicamente precisaria de poderes de superusuário.