sábado, 20 de junho de 2009

Mudanças no GCC 4.3

.
Utilizei, no desenvolvimento do software GAIA (da minha tese de doutorado), uma biblioteca para manipulação de conjuntos nebulosos chamada FISPRO (Fuzzy Inference System Professional) , disponibilizada como software livre. Pode-se utilizar como um sistema completo, interativo, com interface gráfica em java, ou pode-se utilizar apenas as funções (API) da biblioteca, desenvolvida em C++. Em qualquer caso, no Linux, é preciso realizar a compilação da biblioteca, nada que um comandozinho "make" não resolva.

Pois bem, compilei a biblioteca em setembro/outubro do ano passado, sem problemas, programa da tese terminado, tudo beleza.

Estou retomando agora o trabalho com o programa, em especial para geração de uma versão em inglês para apresentar em um congresso. Como de lá pra cá eu zerei a máquina para trocar a versão do ubuntu (de 7.10 para 8.10), precisei agora reconstruir meu ambiente de desenvolvimento. Comecei pela biblioteca FISPRO, baixei, descompactei, ajustei o que tinha que ser ajustado, make.... e surgiu monte de warnings e erros!!! Em especial:

warning: comparison with string literal results in unspecified behaviour
warning: deprecated conversion from string constant to ‘char*’

... e erros mesmo, relacionados com o uso de funções tais como strlen, strcmp, etc...

Depois de passado o pânico e o desespero :-) mãos-a-obra para descobrir porque um programa que compilava direitinho subitamente deixou de compilar (e olha que nem mudou a versão, era exatamente o mesmo programa!).

O motivo é que em 2008 eu usava o GCC versão 4.1, e agora estou usando o GCC 4.3. Pelo que entendi, esta nova versão do GCC não trás apenas novas funcionalidades e conserto de bugs, mas também algumas mudanças intencionais em algumas formas de uso, em especial para suportar novos padrões. Na maioria das vezes, as mudanças serão imperceptíveis, porém em alguns casos elas trarão algumas dores-de-cabeça para quem estiver migrando para o GCC 4.3.

Uma dessas mudanças foi a "limpeza" realizada nos arquivos #include de forma a incluir o menor número possível de arquivos adicionais. Assim, muitos programas em C++ que não incluem explicitamente a não mais compilarão.

Essa é apenas uma das mudanças. Para uma descrição completa e detalhada, sugiro a consulta a esta página:

http://gcc.gnu.org/gcc-4.3/porting_to.html

Bem, e como resolver, sem ter que alterar o código-fonte da biblioteca?

Eu resolvi com a seguinte gambiarra: instalei, via synaptic, o GCC 4.1 (pacotes cpp-4.1 e g++-4.1). Mas não basta isso, vocẽ precisa também redirecionar o atalho "gcc" e "g++" para apontarem para a versão do gcc (e g++) que você quer usar.

Vamos ver como a coisa funciona: abra o terminal, e vá para o diretório /usr/bin. Lá, exiba os arquivos que começam com gcc:

cd /usr/bin
ls -l gcc*
Você vai ver algo do tipo:

lrwxrwxrwx 1 root root 7 2009-06-20 15:11 gcc -> gcc-4.3
-rwxr-xr-x 1 root root 208068 2009-01-23 17:20 gcc-4.3
Se você já tiver instalado o gcc 4.1, verá também:

-rwxr-xr-x 1 root root 198916 2008-10-26 10:12 gcc-4.1
A primeira linha diz que o arquivo gcc, na verdade, é um "link simbólico" para outro arquivo, gcc-4.3. Isto significa que quando você executa o gcc, na verdade, está executando o gcc-4.3. Precisamos então, fazer o link apontar para o arquivo gcc-4.1, para utilizarmos esta versão do compilador. Isto é obtido com os seguintes comandos:

sudo rm gcc (para apagar o gcc)
sudo ln -T gcc-4.1 gcc -s (para recriar gcc, desta vez apontando para gcc-4.1)

Agora, ao pedir o diretório, você deverá ver:

lrwxrwxrwx 1 root root 7 2009-06-20 15:11 gcc -> gcc-4.1
-rwxr-xr-x 1 root root 198916 2008-10-26 10:12 gcc-4.1
-rwxr-xr-x 1 root root 208068 2009-01-23 17:20 gcc-4.3
Não esqueça de fazer a mesma coisa com o g++:

ls -l g++*

lrwxrwxrwx 1 root root 7 2009-06-20 15:20 g++ -> g++-4.1
-rwxr-xr-x 1 root root 200836 2008-10-26 10:11 g++-4.1
-rwxr-xr-x 1 root root 212164 2009-01-23 17:17 g++-4.3
Para testar, use "gcc --version" (ou g++ --version).

gcc (GCC) 4.1.3 20080623 (prerelease) (Ubuntu 4.1.2-23ubuntu3)
Copyright (C) 2006 Free Software Foundation, Inc.
E não esqueca de avisar aos desenvolvedores do código que você está tentando utilizar sobre esses problemas e mudanças. Lembre-se, colaborar com software livre não é apenas programar. Um relato de bugs e/ou problemas, é uma ajuda e tanto! (Eu já avisei a galera que desenvolve a biblioteca fispro.... :-) ).

Mais um aviso, lembre-se de fazer este tipo de alteração com bastante cuidado, para não "estragar" o seu sistema.

Grande abraço a todas e a todos!

Carlão

terça-feira, 2 de junho de 2009

Palestras no III ENSL / IV FSL-BA

.
Estive em Salvador/BA semana passada para participar de um evento que reuniu o III ENSL - Encontro Nordestino de Software Livre e o IV Festival de Software Livre da Bahia, organizado principalmente pelo Projeto Software Livre Bahia.




Neste evento, apresentei duas palestras:
- Uma introdução a programação de GUIs com GTK+ : abordou principalmente algumas dicas para ajudar os iniciantes na programação utilizando esta toolkit gráfica.
- Programação GTK: Uma introdução ao GLADE : apresentou o software GLADE, um grande auxiliador para a construção de interfaces gráficas utilizando a biblioteca GTK.

Os slides dessas palestras podem ser encontrados na página de apresentações do projeto GNOME Brasil.

Grande abraço a todas e a todos!
Carlão

PS: É sim, o blog voltou a vida.... :-)