当我使用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 ,它解决了这个问题,但是可能需要libs和ldflags来构build整个Perl。)