mslomp
(usa Slackware)
Enviado em 28/08/2008 - 11:42h
as specs do gcc controlam suas relações com bibliotecas internas (libgcc, mudflap, etc), além da glibc, bem como a interoperabilidade entre host e target, assembler, linker e afins, localização padrão de headers, etc, etc, etc.
na maioria das plataformas (incluindo *-linux-gnu), as specs são embutidas por default, visto que as mesmas já estão "sintonizadas" com o host e o target, não sendo necessária sua modificação. você pode visualizá-las através de:
# gcc -dumpspecs
se você pretende utilizá-las externamente, a fim de modificá-las conforme suas necessidades, pode exportá-la com o auxílio do comando acima:
# cat gcc -dumpspecs > $(prefix)/lib/gcc/$(target)/$(version)/specs
no seu caso, utilizando o /tools como prefix, e assumindo a mais recente versão estável do gcc (4.3.2), teremos algo como:
/tools/lib/gcc/i686-pc-linux-gnu/4.3.2/specs
feito isso, ao digitar:
# gcc -v
você notará o aviso:
"reading specs from file /tools/lib/gcc/blablabla"
e a partir de então, qualquer modificação no script specs surtirá efeito no funcionamento do gcc.
um fator importantíssimo ao compilar o próprio gcc e que causa muita confusão é justamente quanto a possíveis problemas com localização de bibliotecas externas. note, portanto, que isso está intimamente ligado não ao gcc, mas sim ao binutils. por isso é preciso muita cautela ao associar o gcc com as ferramentas do binutils (linker, assembler, etc). um parâmetro incorreto na configuração do gcc e/ou do binutils e terá conseguido muita "sarna para se coçar". ambos devem estar corretamente afinados.
há dois modos de controlar os diretórios padrão de busca por bibliotecas no binutils:
1 - através da flag --with-lib-path no configure
o default é /usr/lib:/usr/$(target)/lib:/usr/local/lib:/lib.
através da flag acima, há a possibilidade de adicionar/remover caminhos. pode tentar algo como:
--with-lib-path=/tools/lib:(...outros...):/usr/$(target)/lib:/usr/lib:/usr/local/lib:/lib
2 - através do linker script
esse script controla justamente os parâmetros do linkador e são específicas em cada plataforma. no caso do nosso velho amigo x86, eles reside em: $(binutils_prefix)/$(target)/lib/elf_i386.x
então basta adicionar/modificar as entradas SEARCH_DIR
no caso específico do LFS, tome cuidado redobrado ao seguir as instruções para a compilação dos mesmos, principalmente no toolchain, pois após o chroot, qualquer conflito com a libc vai se transofrmar em pesadelo e será praticamente impossível seguir adiante.