Construindo o programa glibc e compilação customizado contra ele

2

Eu tenho vasculhado a internet por alguns dias agora para obter algumas informações sobre como (cross) compilar a glibc e então compilar um programa contra ela.

Até agora, consegui compilar a glibc usando os seguintes comandos: ../configure arm-none-linux-gnueabi --host=arm-none-linux-gnueabi --target=arm-linux-gnueabi --prefix='pwd' --build=i686-pc-linux-gnu' make -j4

Quanto ao programa em si, eu segui este post e tudo pareceu funcionar ... Até eu perceber que nenhum das mudanças que fiz na glibc estavam refletindo.

Para criar um teste para verificar se a biblioteca estava sendo vinculada de fato, fiz as seguintes alterações:
Eu modifiquei include/signal.h e adicionei extern int my_test_fn(void);
Então, eu modifiquei signal/signal.c primeiro e depois sysdeps/posix/signal.c e adicionei a definição da função da seguinte forma:

int my_test_fn() {
    errno=13; //EACCESS
}

Quando tentei compilar meu programa, ele criou In function 'tuning_library_init': /home/guru/workspace/tuning-library/tuning_library.c:1076: undefined reference to 'my_test_fn' collect2: error: ld returned 1 exit status make: *** [host] Error 1

    
por Guru Prasad 05.09.2014 / 20:01

1 resposta

0

Antes de ir para longe:

Leia este guia em Compilação cruzada de ARM compreender os princípios básicos. As etapas utilizadas são SEMPRE uma DIRETRIZ GERAL, independentemente das versões utilizadas. Para algo mais profundo que você aprenderá, navegue no Wiki do CLFS para baixar ou ler o atual livro Estável . Siga o livro até terminar de criar o toolchain compilado, depois desvie-se do livro para começar a criar o que você precisa para fazer a compilação cruzada.

Você não apenas compila a glibc, você precisa fazer uma compilação cruzada de todo um conjunto de ferramentas. Componentes de toolchain são SEMPRE:

  1. BinUtils , para o assembler e o linker
  2. Um compilador, provavelmente GCC
  3. Biblioteca AC, provavelmente Glibc ou ucLibc para plataformas integradas
  4. Um depurador, provavelmente GDB

Veja: Entrada do Wiki do eLinux em Toolchains e Entrada da WikiPedia no GNU Toolchain .

Eles também devem ser criados em uma ordem específica toda vez que você segmentar uma nova arquitetura. Você aprenderá essa ordem lendo qualquer um dos links acima, embora o CLFS Book forneça comandos passo a passo, com explicações bastante bem escritas e o raciocínio por trás disso. Eu recomendo começar o seu processo, depois de uma xícara de café ou Mountain Dew, como nas primeiras vezes que você fizer isso, você levará alguns dias. À medida que você faz mais e o processo se torna enraizado, leva entre 4 e 6 horas.

Uma pegadinha comum aqui é que as pessoas acidentalmente misturam seus cabeçalhos de host e toolchain com os cabeçalhos compilados, o que pode ser o que você fez. Os arquivos de cabeçalho que você deve incluir em sua cadeia de compilação cruzada devem ser armazenados em algum lugar como /home/username/usr/local/include para não contaminar seu host.

    
por 05.09.2014 / 20:15