O LFS recria o conjunto de ferramentas (isto é, o compilador, o vinculador, o montador e as bibliotecas usadas por todos eles) três vezes:
- A primeira vez usa o conjunto de ferramentas do sistema host para criar um novo conjunto de ferramentas (
gcc
, ld
, binutils
, glibc
, etc) no sistema de destino. Essas ferramentas serão vinculadas a bibliotecas compartilhadas no sistema host, o que não estaria presente se você inicializasse em seu sistema de destino no momento. Então ...
- A segunda vez que o conjunto de ferramentas é construído nas bibliotecas instaladas na máquina de destino. Isso significa que o conjunto de ferramentas funcionará se você inicializar no sistema de destino, mas ainda há alguma possibilidade de que as coisas possam estar vinculadas ao sistema host e independentemente de o conjunto de ferramentas ainda estar compilado com otimizações direcionadas ao sistema host e não ao sistema de destino. Então ...
- A terceira vez é o charme e, desta vez, o conjunto de ferramentas será completamente "limpo" de todos os links ou anexos do sistema host e otimizado para o sistema de destino.
Esta é talvez a parte mais importante da construção de um sistema LFS, e é muito importante prestar muita atenção nas instruções. Em todos os sistemas LFS que construí (quatro até hoje), esta foi a única seção em que encontrei problemas. Às vezes, esses problemas só aparecem muito mais tarde, o que, como você pode imaginar, é muito frustrante.