![]() | ||||
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Secção 5 - Importar, Compilar e obter ProgramasPergunta 5.1 - Como importar XXX para o Linux?Em geral, os programas UNIX, precisam de poucas modificações para serem importados. Simplesmente siga as instruções de instalação. Se não souber como importar e nem souber como encontrar as respostas para algumas das perguntas feitas pelo procedimento de instalação, pode tentar adivinhar, mas isso tende a produzir programas defeituosos. Neste caso, é melhor pedir para alguma outra pessoa fazer a importação.Se tiver um programa para sistemas similares ao BSD, tente usar
-I/usr/include/bsd e -lbsd nos lugares apropriados. Pergunta 5.2 - O que é ld.so e onde o posso obter?O ld.so é um carregador de bibliotecas dinâmicas. Cada binário que use essas bibliotecas costumava ter cerca de 3K de código de iniciação que procurava e carregava essas bibliotecas. Agora, esse código foi colocado numa biblioteca dinâmica especial, /lib/ld.so, que pode ser usada por todos os binários, gastando assim menos espaço em disco e facilitando as actualizações.Ela pode ser obtida de tsx-11.mit.edu em /pub/linux/packages/GCC e nos seus mirrors. /lib/ld-linux.so.1 é a mesma coisa para ELF e vem no mesmo pacote do
carregador a.out. Pergunta 5.3 - Alguém já importou / compilou / escreveu XXX para o Linux?Primeiro, verifique o Linux Software Map (LSM) -- ele está no directório docs em sunsite.unc.edu e outros sites de FTP. Um mecanismo de procura está disponível por WWW em http://www.boutell.com/lsm/.Verifique os sites FTP (veja a Pergunta 2.5 - Onde ir buscar material sobre o Linux por FTP?) antes -- procure por palavras apropriadas nos arquivos find-ls ou INDEX. Verifique o Linux Projects Map (LPM), em ftp.ix.de em /pub/Linux/docs/Projects-Map.gz. Se não encontrar nada, pode fazer download do código fonte e compilá-los mesmo, ver a Pergunta 5.1- Como importar XXX para o Linux? ou se o pacote for muito grande e necessitar de algumas modificações mande uma mensagem para o grupo comp.os.linux.development.apps. Se compilar um programa grande, por favor faça o upload dele para um ou mais sites FTP e envie uma mensagem para comp.os.linux.announce (submeta a sua mensagem para linux-announce@news.ornl.gov). Se estiver à procura de um programa tipo aplicação é provável que alguém já tenha escrito uma versão gratuita. Tente ler a FAQ em comp.sources.wanted para as instruções de como encontrar fontes. Também pode ler o Projects-FAQ, disponível em sunsite.unc.edu
em /pub/Linux/docs/faqs/Projects-FAQ. Pergunta 5.4 - É possível usar um programa ou compilador, que esteja compilado para um 486 num 386?Sim, a menos que seja o kernel. A opção -m486 do GCC, que é usada para compilar binários para máquinas 486, meramente faz algumas certas optimizações. Isso produz binários levemente maiores que são executados um pouco mais rápido num 486. Porém eles ainda funcionam perfeitamente num 386, apesar de uma pequena queda na sua performance.Todavia, a partir da versão 1.3.35, o kernel usará instruções específicas de 486 no Pentium, se estiver configurado para tais máquinas, impossibilitando a utilização deles em 386s. O GCC pode ser configurado para 386 ou 486; a única diferença é que configurando-o para um 386, faz com que -m386 seja default e configurando-o para um 486, faz com que -m486 seja o default. Em qualquer caso, essa opção pode ser mudada em cada compilação ou editando /usr/lib/gcc-lib/i*-linux/n.n.n/specs. Existe uma versão alpha do GCC que sabe fazer
optimizações para 586, mas ele ainda não é
confiável, especialmente se forem pedidas muitas
optimizações. O GCC para Pentium pode ser encontrado em:
tsx-11.mit.edu em /pub/linux/ALPHA/pentium-gcc. Recomendo usar o GCC normal
para 486; diz-se que usando-se a opção -m386 produz
código melhor para o Pentium, ou pelo menos um pouco menor. Pergunta 5.5 - O que faz o gcc -O6 ?Actualmente o mesmo que -O2 (GCC 2.5) ou -O3 (GCC 2.6, GCC 2.7); qualquer número maior que aqueles, no momento fazem a mesma coisa. Os Makefiles dos kernels mais recentes usam -O2, provavelmente deveria fazer o mesmo.Pergunta 5.6 - Onde estão, <linux/*.h> e <asm/*.h>?Estão nos directórios /usr/include/linux e /usr/include/asm. Porém eles devem ser links simbólicos para os códigos fontes do kernel em /usr/src/linuc e não directórios reais.Se não tiver o código fonte do kernel faça o download. Então use rm para remover quaisquer arquivos desnecessários e ln para criar os links: rm -rf /usr/include/linux /usr/include/asm Hoje em dia /usr/src/linux/include/asm é um link simbólico
para um directório asm-<arch> específico para cada
arquitectura - make symlinks criará os links simbólicos.
Também poderá precisar fazer make config na árvore de
fontes do kernel recém "desempacotada" para criar
<linux/autoconf.h>. Pergunta 5.7 - Eu recebo erros quando tento compilar o kernel.Certifique-se que /usr/include/linux e /usr/include/asm não são realmente directórios e sim links simbólicos para /usr/src/linux/include/linux e /usr/src/linux/include/asm respectivamente.Se necessário, apague-os usando rm e então use ln -s para criar os links como mostrado na Pergunta 5.6 - Onde estão <linux/*.h> e <asm/*.h>?'. Lembre-se de que ao aplicar um patch a um kernel deve usar a opção -p0 ou -p1; caso contrário o patch pode ser aplicado de forma incorrecta. Ver a página de manual do patch para detalhes. Se estiver a aplicar patches a um kernel mais recente que 1.1.44, notará um novo directório /usr/src/linux/include/asm-i386. O directório asm deve ser removido. O "target" symlinks do Makefile fará eles serem links simbólicos para asm-i386 e arch/i386/boot respectivamente. A forma mais fácil de se certificar de que não ocorram problemas deste tipo é fazer o download de todo kernel, ao contrário de aplicar um ptach. ld: unrecognised option `-qmagic' significa que deve ir buscar um linker
mais novo, de tsx-11.mit.edu em /pub/linux/packages/GCC, no arquivo
binutils-2.6.0.2.bin.tar.gz. Pergunta 5.8 - Como se faz uma biblioteca dinâmica?Para ELF,gcc -fPIC -c *.c Para a.out, "upload" tools-n.nn.tar.gz de tsx-11.mit.edu, em
/pub/linux/packages/GCC/src. Ele vem com documentação que lhe
dirá o que fazer. Note que bibliotecas dinâmicas para a.out
são bastante complicadas. Pergunta 5.9 - Os meus executáveis são (muito) grandes.Com um compilador ELF (ver a Pergunta 8.2 - O que é o ELF?) a causa mais comum de executáveis grandes é a falta de um link para a biblioteca .so apropriada que está a usar. Deve haver um link como libc.so para cada biblioteca como libc.so.5.2.18.Com um compilador a.out (ver a Pergunta 8.2 - O que é o ELF?) a causa mais comum do problema é o flag -g passado ao link editor (compilador). Ele produz um programa que é "linkado" estaticamente (além de informações para depuração no arquivo de saída), i.e. um que inclui uma cópia da biblioteca C, ao contrário de usar uma cópia ligada dinamicamente. Outros factores a serem investigados são -O e -O2 que habilitam a optimização (ver a documentação do GCC) e -s (ou o comando strip) que remove informações de símbolos do binário resultante (tornando a depuração totalmente impossível). Pode querer usar -N em executáveis muito pequenos (menores que 8K
com a opção -N), mas não deve usá-lo a menos que
esteja ciente das implicações sobre a performance, e
definitivamente nunca em demons. Pergunta 5.10 - O Linux suporta "threads" ou processos "lightweight"?Assim como o modelo de multiprocessamento do UNIX envolvendo processos "heavyweight", que é claro, são parte do kernel padrão do Linux, existem várias implementações de processos "lightweight" ou "threads", a maioria dos quais são pacotes genéricos para qualquer UNIX.
Pergunta 5.11 - Onde posso obter o `lint' para o Linux?A funcionalidade aproximadamente equivalente está incluída no compilador C GNU (gcc) que é usado em sistemas Linux. Use a opção -Wall para habilitar a maioria dos avisos úteis extra. Ver o manual do GCC para mais detalhes (digite contro-h seguido de i no Emacs e seleccione a entrada para GCC).Existe um programa disponível gratuitamente chamado `lclint' que faz
quase a mesma coisa que o lint tradicional. O anúncio e o código
fonte estão disponíveis em larch.lcs.mit.edu em
/pub/Larch/lclint; no World Wide Web veja em
http://larch-ww.lcs.mit.edu:8001/larch/lclint.html
|