从源代码构build旧的Perl – 如何添加math库?

当我使用Perl 5.10.1时,出现了一些错误,我发现了一些相关的线程,

错误消息来自链接器,而不是来自编译器。 您应该在所有编辑行末尾加上-lm

我的问题是我需要添加-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 

当我在运行GNewSense 4的MIPS处理器的Lemote 8089笔记本电脑上构buildSPEC基准testing套件中的Perl 5.8时,遇到了同样的问题。由于Perl运行testinglib/ExtUtils/t/Embed时找不到math库lib/ExtUtils/t/Embed在构build过程中lib/ExtUtils/t/Embed 。 错误信息看起来和你的一样。

解决scheme是通过链接器标志-lm

 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 

这里的技巧是连接器标志被称为小写ldflags而不是在许多其他软件包中find的LDFLAGS 。 此外,通过在ldflags中使用-A (可能意味着“append”)指令来为PERLFLAGS添加PERLFLAGS

(这是第二个标志ldflags=-lm ,它解决了这个问题,但是可能需要libsldflags来构build整个Perl。)