Использование Time::HiRes в проекте после загрузки из Интернета: HiRes.so: неопределенный символ: Perl_Gthr_key_ptr

Я начал работать с Perl только на прошлой неделе, потому что мне пришлось исправить некоторые вещи в нашем устаревшем коде в рабочей среде.

Ситуация такова, что в нашем производстве установлен Perl 5.32.0, и я не могу изменить или установить в нем какие-либо пакеты.

В моем коде мне нужно получить время в миллисекундах, которое можно получить с помощью модуля Time::HiRes. Но я не могу его установить! Итак, я скопировал его в свой проект вместе с файлом проекта.

Я скачал Time-HiRes-1.9764.tar.gz с https://metacpan.org/pod/Time::HiRes, разархивировал его и скопировал HiRes.pm в каталог Time моего проекта.

Я получаю эту ошибку:

/usr/local/bin/perl: symbol lookup error: /usr/local/bin/perl_5.6.1/lib/site_perl/5.6.1/i686-linux/auto/Time/HiRes/HiRes.so: undefined symbol: Perl_Gthr_key_ptr

Теперь мои вопросы: Как правильно загрузить HiRes.pm из Интернета и скопировать его в локальный проект без каких-либо зависимостей? 2. Элемент списка

Time::HiRes уже должен быть установлен. Это часть основной установки Perl, начиная с версии 5.7.3. Вы уверены, что он не установлен? Что вы получите, если наберете perldoc -l Time::HiRes?

TLP 23.08.2024 14:46

Вы продолжаете настаивать на том, что не можете его установить, а затем говорите, что установили его (плохо). Почему вы говорите, что не можете его установить? Это потому, что вы думаете, что у вас недостаточно системных разрешений? Вы можете устанавливать модули в любой каталог. Ты просто сделал это неправильно. Если это проблема, мы можем показать вам, как это сделать.

ikegami 23.08.2024 15:11

@TLP: $ /usr/local/packages/perl_remote/5.32.0/bin/perldoc -l "Time::HiRes" /usr/local/packages/perl_remote/5.32.0/bin/perldoc: команда не найдена. У меня нет разрешения на запуск perldoc. perldoc присутствует в каталоге.

Om Sao 23.08.2024 17:57

@ikegami: Да, у меня нет разрешений. Кроме того, эта производственная среда не подключена к Интернету, поэтому я не могу установить. В любом случае, я обошёл этот путь, получив миллисекунду, используя date +%s.%N

Om Sao 23.08.2024 17:59

Как уже упоминалось, в комментарии, который привел qx{ date +%s.%N }, нет смысла использовать его, поскольку на его использование уходит добрая часть секунды, если не целая секунда. Более точный результат вы получите, если time.

ikegami 23.08.2024 18:40

@OmSao У вас нет разрешения на запуск perldoc? Это буквально просто информационная команда. Кажется, ваша установка не работает, вам следует обратиться к администратору сервера и попросить его исправить это. Кажется, они изменили разрешения на некоторые основные функции Perl. Это ваше решение. Кроме того, perlbrew может устанавливать модули в файлы ваших пользователей.

TLP 23.08.2024 19:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
6
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
  1. Time::HiRes является основным модулем начиная с версии 5.7.3, т. е. он должен быть частью установки Perl.

  2. Стандартный способ установки модуля Perl:

perl Makefile.PL
make
make test
make install

Некоторые модули Perl не являются чистым Perl, они также содержат код XS, который необходимо скомпилировать, и Time::HiRes — один из них.

Спасибо @choroba. К сожалению, я не могу установить Perl в производство. Есть ли другой способ получить время эпохи в миллисекундах без Time::HiRes? Любое обходное решение?

Om Sao 23.08.2024 10:01

Наверное, можно qx{ date +%H:%M:%S.%N }, но это будет настолько медленно, что нет смысла измерять миллисекунды. Мой тест показывает, что он в несколько тысяч раз медленнее, чем при использовании Time::HiRes.

choroba 23.08.2024 10:11

Вам не нужен ни Интернет, ни разрешения.

Сначала установите tarball на компьютер, разархивируйте и извлеките файлы.

Затем используйте параметр INSTALL_BASE, чтобы сообщить установщику, куда его установить.

tar xzf Time-HiRes-1.9764.tar.gz
cd Time-HiRes-1.9764
perl MakeFile.PL INSTALL_BASE=...
make test
make install

Наконец, убедитесь, что переменная env PERL5LIB установлена ​​правильно, чтобы Perl мог найти модуль.

Другие вопросы по теме