Сборка старого Perl из исходного кода - Как добавить математическую библиотеку?

Когда я делаю 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

1 ответ

Решение

Я столкнулся с той же проблемой, когда собирал Perl 5.8, включенный в набор тестов SPEC, на ноутбуке Lemote 8089 с процессором MIPS под управлением GNewSense 4. Perl не удалось собрать, поскольку он не мог найти библиотеку Math, когда выполнял тест 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.)

Другие вопросы по тегам