[Ubuntu-BR] Um pequeno "bug" no Edgy
Andre Cavalcante
andre.d.cavalcante em gmail.com
Quarta Janeiro 17 13:46:58 UTC 2007
Não sei onde reportar isso, então estou colocando aqui. Por favor repassem
adequadamente...
É o seguinte:
Cadeia de includes na compilação pelo gcc: começa na pasta local, depois
diretórios da chave -I, depois a pasta do sistema, que no caso é
/usr/include.
Se você fizer:
#include <errno.h>
....
no seu código, e usar a constante EAGAIN (retorno de erro do system call
read) dá um erro que o símbolo é desconhecido!
Também aparece a seguinte mensagem vez em quando durante a compilação:
warning This machine appears to be neither x86_64 nor i386.
Eu pensei, como, se é do sistema?
Vasculhei a cadeia de includes do sistema e me deparei com o seguinte.
/usr/include/errno.h faz include em /usr/include/bits/errno.h que faz
include em /usr/include/linux/errno.h que faz include em
/usr/include/asm/errno.h. Este último tem o seguinte código:
/* File autogenerated by 'make headers_install' */
#ifndef __ASM_STUB_ERRNO_H
#define __ASM_STUB_ERRNO_H
# if defined __x86_64__
# include <asm-x86_64/errno.h>
# elif defined __i386__
# include <asm-i386/errno.h>
# else
# warning This machine appears to be neither x86_64 nor i386.
# endif
#endif /* __ASM_STUB_ERRNO_H */
Ou seja, achei de onde vinha o warning e o porque do erro: o errno.h não
estava de fato sendo incluído e a constante EAGAIN não é definida em nenhum
dos includes acima.
Bem, busquei pela constante (EAGAIN) e descobri que ela está em
/usr/include/asm-generic/errno.h. Detalhe, generic é a versão do kernel do
Ubuntu 6.10.
Agora o bug: se o arquivo /usr/include/asm/errno.h é autogerado, e a versão
da compilação do kernel é generic, deveria haver uma entrada na lista de
#ifdef...#elif...#else...#endif para a pasta generic. As outras pastas são
igualmente válidas.
Agora minha dúvida: posso alterar este arquivo, na mão, sem grandes
repercurssões e, principalmente sem a necessidade de estar de tempos em
tempos alterando-o, pelo menos até a cadeia de includes vir correta? Penso
que sim, pois o arquivo deve ser gerado na compilação do Kernel, e não
pretendo re-compilá-lo.
PS: máquina IBM ThingCentre P4 2,8G, 512M Ram, Ubuntu 6.10, gcc
4.1.2instalado globalmente e arm-elf-gcc
3.4.3 instalado no diretório do usuário.
André Cavalcante
Manaus, AM.
More information about the ubuntu-br
mailing list