Назад | Перейти на главную страницу

Сборка старого 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

Я столкнулся с той же проблемой, когда собирал 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.)