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.458 ]

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

Flash, Java, Skype, Google Chrome e outros aplicativos - Instalação no Ubuntu 12.04

Inicializando uma máquina virtual no VirtualBox via pendrive USB

Software Data Cable - Transfira arquivos de aparelho Android para computador via Wireless

Imprimindo para PDF a partir de programas rodando sob o Wine no openSUSE 13.2

Problema com acentuação das pastas do usuário no XFCE sob Slackware e de quebra altere as pastas de usuário padrão

Leitura recomendada

Habilitar porta paralela PCI Express NetMos Technology Device 9900 no Debian Squeeze

Utilizando saídas S-VHS, VGA e LCD com placa de vídeo Intel 945G

Configuração de Whitelist e Blacklist no Zimbra

Como empacotar programas compilados em DEB

Bloqueio de tela com i3wm

  

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