Corrigindo erro "File in wrong format" durante compilação de pacotes no Slackware 64

Publicado por Luís Fernando C. Cavalheiro em 10/02/2016

[ Hits: 3.459 ]

Blog: https://github.com/lcavalheiro/

 


Corrigindo erro "File in wrong format" durante compilação de pacotes no Slackware 64



Seres humanos e usuários do Viva o Linux, aqui começa mais uma Dica do Dino® trazendo para todos vocês informações tão fresquinhas e atuais quanto o Big Bang. Hoje vamos a uma rapidinha, já que nem sempre todo mundo tem tempo pra passar meia hora em plena atividade.

Na Dica do Dino® de hoje, vamos comentar sobre um erro irritante que às vezes acontece quando você está compilando coisas no Slackware 64. Vamos pegar o exemplo do celt. Usando o script SlackBuild disponível em SlackBuilds, na hora de montar o pacote vai dar um erro como o dessa mensagem aí:

/bin/sh ../libtool --tag=CC --mode=link x86_64-slackware-linux-gcc -std=gnu99 -O2 -fPIC -fvisibility=hidden -W -Wstrict-prototypes -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wno-parentheses -Wno-unused-parameter -Wno-sign-compare -o celtenc celtenc.o wav_io.o skeleton.o ../libcelt/libcelt0.la -L/usr/lib -logg -lm

libtool: link: x86_64-slackware-linux-gcc -std=gnu99 -O2 -fPIC -fvisibility=hidden -W -Wstrict-prototypes -Wall -Wextra -Wcast-align -Wnested-externs -Wshadow -Wno-parentheses -Wno-unused-parameter -Wno-sign-compare -o .libs/celtenc celtenc.o wav_io.o skeleton.o ../libcelt/.libs/libcelt0.so -L/usr/lib /usr/lib/libogg.so -lm -Wl,-rpath -Wl,/usr/lib64

/usr/lib/libogg.so: could not read symbols: File in wrong format
collect2: error: ld returned 1 exit status
make[2]: *** [celtenc] Error 1
make[2]: Leaving directory `/tmp/SBo/celt-0.11.3/tools'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/SBo/celt-0.11.3'
make: *** [all] Error 2
Esse erro não acontece quando você compila o pacote em 32 bits. Isso me fez pensar e pesquisar - como todo slacker precisa fazer, óbvio -, e eu sempre tinha a dica na ponta do Google para resolver meu problema. Porém, cada vez menos eu lembro das palavras chaves necessárias para chegar à solução (em Fontes há o link para a página na qual encontrei a solução do problema), e por isso decidi trazer para o Viva o Linux.

Mas por que isso acontece, Dino®?

Por alguma razão, na hora de compilar alguns pacotes o compilador não "adivinha" corretamente o diretório para as bibliotecas do sistema (que no Slackware é /usr/lib e no Slackware 64, /usr/lib64). Isso é comum em sistemas com multilib ativado. Resultado: o compilador tenta usar as bibliotecas de 32 bits, a maioria delas inexistentes no sistema, e por isso mesmo a coisa desanda.

Mas tem conserto, Dino®?

Meu querido, quando o assunto é Slackware tudo tem conserto - até mesmo a morte. A solução é bem simples até: você precisa passar o LDFLAGS correto para o compilador (ou para o script de compilação, caso você esteja usando um SlackBuild). O LDFLAGS determina onde o compilador vai buscar as bibliotecas instaladas no sistema, e se ele estiver errado a compilação simplesmente não ocorrerá. A flag é:

LDFLAGS="-L/usr/lib64"

Se você usa um script SlackBuild, será preciso passar a flag pro script:

# LDFLAGS="-L/usr/lib64" sh celt.SlackBuild

Mas se você compila na unha, sem script nem nada, é preciso passar a flag pro make:

LDFLAGS="-L/usr/lib64" make

Lembrando que é de muito bom tom compilar como usuário comum, e deixar apenas o make install para ser executado como root.

Conclusão

E é isso, senhoras, senhores, seres humanos e meninos do computador. Aqui se encerra mais uma Dica do Dino® trazendo para todos vocês mais uma pitada do Slack Original. Lembre-se das palavras do grande J. R. "Bob" Dobbs: o fim do mundo está próximo e você pode morrer no apocalipse!

Fonte: [SOLVED]I keep getting this error: "File in wrong format" - LinuxQuestions.org

Outras dicas deste autor

Telegram Desktop parou de funcionar após atualização ou troca de idioma? Corrija isso já!

Fazendo o Steam funcionar no openSUSE Leap 15.0

Slackware64: multilib for dummies (usando slackpkg+)

usbboot.img - A mídia de instalação mínima do Slackware

Oneko: tenha um gato na tela do seu computador

Leitura recomendada

Traduzindo o Pardus 2011.2 para português do Brasil

Grupo vboxusers - Adicionando usuários de forma segura

Iniciando Debian 8 em modo texto (bem simples)

Adicionando o repositório Medibuntu no Ubuntu Linux

Atualizando Ubuntu 14.04 LTS para o Ubuntu 16.04 LTS

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts