2015-03-23 6 views
1

Я должен установить Perl 5.10.1 на Ubuntu 14.04 согласно моему требованию. Когда я загрузить и установить пакет, я получаю следующие ошибки,Как установить Perl 5.10.1 на Ubuntu 14.04?

cc -fstack-protector -L/usr/local/lib -o miniperl \ 
      gv.o toke.o perly.o pad.o regcomp.o dump.o util.o mg.o reentr.o mro.o hv.o av.o run.o pp_hot.o sv.o pp.o scope.o pp_ctl.o pp_sys.o doop.o doio.o regexec.o utf8.o taint.o deb.o universal.o xsutils.o globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o \ 
     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+0x39ee): undefined reference to `floor' 
pp.c:(.text+0x3a21): undefined reference to `floor' 
pp.c:(.text+0x3d94): undefined reference to `fmod' 
pp.o: In function `Perl_pp_atan2': 
pp.c:(.text+0x8a05): undefined reference to `atan2' 
pp.o: In function `Perl_pp_sin': 
pp.c:(.text+0x8ba2): undefined reference to `sin' 
pp.o: In function `Perl_pp_int': 
pp.c:(.text+0x9061): undefined reference to `floor' 
pp.c:(.text+0x90d1): 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 

Я попытался включая математическую библиотеку <math.h> в файле pp.c но бесполезно. Нужно ли что-нибудь еще мне делать?

Также скажите, есть ли инструмент, который преобразует Perl 5.10.1 Script, совместимый с Perl 5.18.2, когда я получаю обратные предупреждения о совместимости при компиляции с 5.18.2.

+0

Зачем вам нужен старая версия perl? Там должны быть предварительно скомпилированные пакеты. А если нет - что вы делаете, чтобы построить свой новый perl? Похоже, вы пытаетесь скомпилировать с 'cc' - у вас установлена' gcc'? – Sobrique

+1

https://github.com/tokuhirom/plenv –

+0

@Sobrique Да У меня есть некоторые предварительно скомпилированные пакеты. Для их выполнения мне нужна старая версия Perl ... Компиляция C является частью установки –

ответ

3

Вы можете использовать perlbrew, программу, которая управляет установками Perl.

  1. Установите его, используя apt-get install perlbrew как корень
  2. Инициализировать его, запустив perlbrew init
  3. Добавить source ~/perl5/perlbrew/etc/bashrc в свой .bashrc и начать новую оболочку.
  4. Установка Perl 5.10 с помощью perlbrew install perl-5.10.1
  5. Теперь вы можете использовать perlbrew use изменить Perl для текущей оболочки или perlbrew switch изменить Perl во всем мире.

Если вам нужен только один Perl и вы хотите избежать сложностей perlbrew, вы можете попробовать perl-build.

+0

Эквивалентно, вы, вероятно, могли бы добавить достаточно старый источник пакета Ubuntu (или, вздохнуть, Debian) в Apt, и установить один раз стандартный прекомпилированный двоичный файл. Старый источник может быть сложным, потому что инструментальная цепочка также изменилась. (Например, если использовать '-lm' последним, например, необязательным). – tripleee

1

Пробовал много вещей, и это работает для меня, наконец :)

Шаг 1: найти свой путь Lib, который имеет все libm* файлы

В большинстве систем это было под /usr/lib64. Искать то же самое в вашей машине

system:/usr/lib64$ ls libm* 
libm.a   libmcheck.a  libmenuw.so.5 libmpc.so.3.0.0 libmpfr.so.4 libmpx.so.0.0.0  libm.so   libmvec.a 
libmagic.so.1  libmenu.so.5 libmenuw.so.5.9 libmpdec.so.2  libmpfr.so.4.1.4 libmpxwrappers.so.0  libmspack.so.0  libmvec_nonshared.a 
libmagic.so.1.0.0 libmenu.so.5.9 libmpc.so.3  libmpdec.so.2.4.2 libmpx.so.0 libmpxwrappers.so.0.0.0 libmspack.so.0.1.0 libmvec.so 

Шаг 2: Используйте путь с glibpth опцией при выполнении настройки

./Configure -des -Dglibpth='/lib/lib64 /usr/lib64' 

или я вижу, что некоторые форумы предложили plibpth

./Configure -des -Dplibpth='/lib/lib64 /usr/lib64' -Dglibpth='/lib/lib64 /usr/lib64' -Dlibpth='/lib/lib64 /usr/lib64' 
Смежные вопросы