#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