domingo, 22 de dezembro de 2013

Problemas para compilar com libGL.la

libtool resolvendo problemas

Tentando compilar o fonte do geany-plugins (para ter o corretor ortográfico) encontrei problemas com um handler do libGL.la. Para resolver o problema, tive que começar do começo, partindo da seguinte pergunta: O que é o libGL.la?


Os arquivos *.la são pequenos arquivos de texto puro que contém informações uteis para o libtool, como versões de bibliotecas e localização das mesmas.


Meu primeiro problema foi:


libtool: link: cannot find the library `/usr/lib/libGL.la' or unhandled argument `/usr/lib/libGL.la'


Depois de orar para o deus google (ele sabe tudo e esta em todo lugar) descobri uma dica para criar o arquivo manualmente. O que obviamente seria um estresse a mais, já que estava cansado disso. Descobri em um blog em inglês uma boa dica para criar o arquivo 'vazio' (apenas com os itens a serem preenchidos). Pensei com meus botões (o terceiro botão de cima para baixo sempre me dá dica boa, já os outros...) seria mais fácil assim, depois encontro as informações que preciso e completo o arquivo. O comando foi rodado em /usr/lib:


libtool --mode=link gcc -g -O -o libGL.la /usr/lib/libGL.so


Depois de executado, o comando cria, dentro do diretório em que você estiver, um arquivo mais ou menos assim:


# libGL.la - a libtool library file
# Generated by libtool (GNU libtool) 2.4.2
#
# Please DO NOT delete this file!
# It is necessary for linking the library.

# The name that we can dlopen(3).
dlname=''

# Names of this library.
library_names=''

# The name of the static archive.
old_library='libGL.a'

# Linker flags that can not go in dependency_libs.
inherited_linker_flags=''

# Libraries that this one depends upon.
dependency_libs=''

# Names of additional weak libraries provided by this library
weak_library_names=''

# Version information for libGL.
current=
age=
revision=

# Is this an already installed library?
installed=no

# Should we warn about portability when linking against -modules?
shouldnotlink=no

# Files to dlopen/dlpreopen
dlopen=''
dlpreopen=''

# Directory that this library needs to be installed in:
libdir=''


Observe que o arquivo está 'vazio', por isso ao rodar o slackbuild do geany-plugins o erro passou a ser arquivo inválido. O próximo passo seria encontrar os dados sobre o libGL.so para completar o arquivo. O libGL.so fica em /usr/lib. Procurando um jeito de obter essas informações, encontrei uma resposta mais completa sobre o erro aqui. Pelo texto, temos um comando mais completo que não só cria o arquivo vazio, mas o preenche com as informações (ainda estou estudando o manual no libtool para entender em detalhes o que o comando faz), embora a dica seja de 2006, para slackware 10, aqui no meu slackware 14 funcionou direitinho.



O comando deve ser executado dentro do diretório /usr/X11R6/lib, que na verdade é um link para /usr/lib:


libtool --mode=link gcc -g -O -o libGL.la -rpath /usr/X11R6/lib -lm

Depois disso, o slackbuild conseguiu rodar direito e criar o pacote. O mais interessante entre os dois comandos, é que o segundo cria o libGL.la e o preenche com... zeros. Isso mesmo, a maior parte das informações inseridas pelo segundo comando se limitou a "0", mas tudo funciona direitinho, então para que reclamar né?



Por hoje é só pessoal. =]

Nenhum comentário:

Postar um comentário