Как вы можете определить, какой модуль Perl вызывает «неопределенный символ: Perl_Tstack_sp_ptr?»

#perl #shared-objects

#perl #общие объекты

Вопрос:

Я пытаюсь запустить скрипт на Perl, но он возвращает:

/usr/bin/ perl: ошибка поиска символа: /usr/local/ groundwork / perl / lib / 5.8.8/x86_64-linux-thread-multi/auto/IO/IO.so: неопределенный символ: Perl_Tstack_sp_ptr

Есть ли какой-либо способ определить, какой модуль Perl вызывает это?

Ответ №1:

IO.so является двоичным компонентом ввода-вывода. Модули этого дистрибутива также являются частью дистрибутива perl (т. Е. они имеют двойное время жизни).

Этот тип ошибки обычно возникает при использовании двоичного файла, скомпилированного с использованием одной версии Perl, используется другой версией Perl.

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

1. Спасибо. Это действительно была проблема. Ошибка в верхней части скрипта была направлена на неправильный perl.

2. Могло быть и наоборот: двоичный файл из более старой версии используется более поздней версией Perl. Например, вручную копируя некоторые двоичные файлы из CentOS 6 в CentOS 7 (который использует более высокую версию Perl).

3. Исправлено . . . . .

Ответ №2:

Я столкнулся с этой проблемой недавно, когда у меня была PERL5LIB переменная среды, определенная в моих файлах входа, но они указывали на каталог, который был несовместим с установленным в системе perl. Это произошло потому, что HOME файловая система смонтирована на множестве разных компьютеров, где установки perl неоднородны. Удаление переменной среды решает проблему, и я найду лучший способ управлять локальными библиотеками.

Ответ №3:

У меня много раз возникает похожая проблема, когда я использую старый модуль perl в новой CentOS (например, CentOS 6.4).

 /usr/bin/perl: symbol lookup error: /home/sonnn/perl5/lib/perl5/x86_64-linux-thread-multi/auto/Cwd/Cwd.so: undefined symbol: Perl_Tstack_sp_ptr

/usr/bin/perl: symbol lookup error: /home/sonnn/perl5/lib/perl5/x86_64-linux-thread-multi/auto/version/vxs/vxs.so: undefined symbol: Perl_Tstack_sp_ptr
  

Я решил эти проблемы с помощью:

  • Загрузите исходный код Cwd, версию сhttp://search.cpan.org / и переустановите их

       # tar -xzf version-0.9906.tar.gz
      # cd version-0.9906
      # perl Makefile.PL INSTALL_BASE=/home/sonnn/perl5/
      # make
      # make install
    
      (If you use default module path, you can omit "INSTALL_BASE=/home/sonnn/perl5/")
      
  • Сделайте аналогично для других модулей

В вашем случае, я думаю, вы можете загрузить модуль ввода-вывода с http://search.cpan.org / и переустановите его.

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

1. У меня только что была точно такая же ошибка «vxs», которую вы опубликовали. Альтернативой является использование: «версия cpanm» и «cpanm DBI» (DBI был модулем, у которого возникли проблемы). Я думаю, что это проще, чем устанавливать модуль вручную.

Ответ №4:

Редактировать:

Наконец, хотя я знаю, что это не отвечает на вопрос, я позволяю себе, поскольку это выглядит действительно сложной информацией для получения, потому что я нашел кучу сайтов, упоминающих эти ошибки, но очень немногие из них содержат согласованные решения. Ну вот и все.

Я не смог обработать миграцию zimbra, которую я должен был выполнить до изменения пути к платформам. Мы сделали это, перейдя с Ubuntu 8.04 на Zimbra 6.0.16, затем на Zimbra 7.2.7, перейдя на Ubuntu 10.04, затем обновив Zimbra 8.0.9, затем перейдя на Centos 7, затем обновив до 8.6.0

В Centos, где мне пришлось переместить файлы zimbramon после того, как я это сделал. /install.sh -s …

mv /opt/zimbra / zimbramon/lib/x86_64-linux-gnu-thread-multi/ /opt/zimbra / zimbramon/lib/ x86_64-linux-gnu-thread-multi.bak

Затем я снова запустил install.sh без -s