Construindo o antigo Perl da fonte - Como adicionar a biblioteca de matemática?

2

Quando faço o Perl 5.10.1 recebo alguns erros, encontrei alguns tópicos relacionados que declararam:

The error messages are from the linker, not from the compiler. You should get away by placing a -lm at the end of all compilation lines.

Minha pergunta é onde estão as linhas de compilação das quais preciso adicionar -lm ?

miniperlmain.o opmini.o perlmini.o 
pp.o: In function 'Perl_pp_pow':
pp.c:(.text+0x2daf): undefined reference to 'pow'
pp.o: In function 'Perl_pp_modulo':
pp.c:(.text+0x39fc): undefined reference to 'floor'
pp.c:(.text+0x3a28): undefined reference to 'floor'
pp.c:(.text+0x3a51): undefined reference to 'fmod'
pp.o: In function 'Perl_pp_atan2':
pp.c:(.text+0x89c5): undefined reference to 'atan2'
pp.o: In function 'Perl_pp_sin':
pp.c:(.text+0x8b62): undefined reference to 'sin'
pp.o: In function 'Perl_pp_int':
pp.c:(.text+0x9021): undefined reference to 'floor'
pp.c:(.text+0x9091): undefined reference to 'ceil'
pp.o:(.rodata+0x120): undefined reference to 'cos'
pp.o:(.rodata+0x128): undefined reference to 'sin'
pp.o:(.rodata+0x130): undefined reference to 'sin'
pp.o:(.rodata+0x138): undefined reference to 'exp'
pp.o:(.rodata+0x140): undefined reference to 'log'
pp.o:(.rodata+0x148): undefined reference to 'sqrt'
pp_pack.o: In function 'S_pack_rec':
pp_pack.c:(.text+0x72b3): undefined reference to 'floor'
pp_pack.c:(.text+0x72d6): undefined reference to 'floor'
pp_pack.c:(.text+0x7303): undefined reference to 'floor'
collect2: error: ld returned 1 exit status
make: *** [miniperl] Error 1
    
por rreeves 06.03.2016 / 23:47

1 resposta

2

Eu encontrei o mesmo problema quando estava criando o Perl 5.8 incluído no conjunto de benchmarks SPEC em um laptop Lemote 8089 com um processador MIPS executando o GNewSense 4. O Perl não pôde ser compilado porque não encontrou a Biblioteca de Matemática quando estava executando o teste lib/ExtUtils/t/Embed durante o processo de compilação. O erro messge parece quase o mesmo que o seu.

A solução é passar nas bandeiras do vinculador -lm dizendo

PERLFLAGS="-A libs=-lm -A libs=-ldl -A libs=-lc -A ldflags=-lm -A cflags=-lm -A ccflags=-lm -Dnoextensions=IPC/SysV -Dperl" \
CONFIGFLAGS="--build=mipsel-linux-gnu" ./buildtools

O truque aqui é que o flag de linker é chamado de Lowercase ldflags , em vez de LDFLAGS , conforme encontrado em muitos outros pacotes de software. Além disso, a adição de um sinalizador a ldflags é feita usando a diretiva -A (provavelmente significa "anexar") em PERLFLAGS .

(É o segundo sinalizador ldflags=-lm que corrigiu o problema aqui, mas pode ser ambos libs e ldflags necessários para todo o Perl construir.)

    
por 09.09.2016 / 03:00