Компиляция Perl на ARM: неопределенная ссылка на ‘__stack_chk_guard’

#perl #arm

#perl #arm

Вопрос:

Правильно, итак, я компилирую perl на устройстве ARM. Он настраивается нормально, поэтому я запускаю процесс компиляции. После завершения зависимостей я получаю этот вывод:

 cc -L/lib -L/usr/lib -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 keywords.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 globals.o perlio.o perlapi.o numeric.o mathoms.o locale.o pp_pack.o pp_sort.o   
            miniperlmain.o opmini.o perlmini.o -lnsl -ldl -lm -lcrypt -lutil -lc 
gv.o: In function `Perl_gv_stashpvn':
gv.c:(.text 0x5794): undefined reference to `__stack_chk_fail'
gv.c:(.text 0x5798): undefined reference to `__stack_chk_guard'
  

то же самое и для загрузки других файлов. Я пытался:

  • -fno-stack-protector, -fstack-protector, -fstack-protector-all: никакого эффекта
  • -lssp: не удается найти файл. В моей системе нет файла с именем ‘libssp’
  • Ищу исходный код для libssp, чтобы я мог скомпилировать его сам и ссылаться на него вручную, не могу его найти

Есть идеи?

Комментарии:

1. Возможно, вы захотите предоставить дополнительную информацию, версию perl, OS amp; version, флаги в ./Configure.

2. Хорошо … perl 5.14.0, linux 2.6.12.6-arm1, нет флагов/Configure

3. возможно, вам повезет с запуском ./Configure -Accflags=»-fno-stack-protector», затем восстановление. если нет, я бы подумал об отправке отчета об ошибке на p5p. (добавление -fno-stack-protector только к строке выше не сработает, поскольку это всего лишь ссылка).

4. Возможно, вы захотите проверить версию среды выполнения GCC. Смотрите обсуждение на discussy. joyent.com/viewtopic.php?id=26834 .

Ответ №1:

Публикую ответ, чтобы исключить этот вопрос из списка «без ответа»…

Согласно комментарию @Alex к исходному вопросу, решением было запустить

 ./Configure -Accflags="-fno-stack-protector"
  

а затем перестроить. Важным моментом является то, что вы должны скомпилировать каждый исходный файл с -fno-stack-protector , чтобы избавиться от вызовов __stack_chk_guard . Передача вручную -fno-stack-protector на этапе связывания ничего полезного не дает.