Когда я делаю 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
Я столкнулся с той же проблемой, когда собирал Perl 5.8, включенный в набор тестов SPEC, на ноутбуке Lemote 8089 с процессором MIPS под управлением GNewSense 4. Perl не удалось собрать, потому что он не смог найти математическую библиотеку при запуске теста. lib/ExtUtils/t/Embed
в процессе сборки. Сообщение об ошибке выглядит почти так же, как ваше.
Решение состоит в том, чтобы передать флаги компоновщика -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
скорее, чем LDFLAGS
как и во многих других программных пакетах. Также добавление флага к ldflags
делается с помощью -A
(вероятно, означает "добавить") в PERLFLAGS
.
(Это второй флаг ldflags=-lm
это устранило проблему здесь, но могут быть оба libs
и ldflags
необходимы для построения всего Perl.)