Невозможно скомпилировать Crypt :: Sodium на CentOS 6 - PullRequest
0 голосов
/ 16 октября 2018

Установлена ​​система Perl версии 5.10.1, которая, как я знаю, старая;это радости дистрибутивов на основе RHEL!Я получаю те же результаты, использую ли я cpan, или загружаю модуль и make it:

/usr/bin/perl /usr/share/perl5/ExtUtils/xsubpp  -typemap /usr/share/perl5/ExtUtils/typemap  Sodium.xs > Sodium.xsc && mv Sodium.xsc Sodium.c
Error: Cannot parse function definition from 'crypto_generichash_state * T_PTRREF' in Sodium.xs, line 715
Error: 'crypto_generichash_state *' not in typemap in Sodium.xs, line 735
Error: 'crypto_generichash_state *' not in typemap in Sodium.xs, line 739
Error: 'crypto_generichash_state *' not in typemap in Sodium.xs, line 748
make: *** [Sodium.c] Error 1

Секция вокруг строка 715 выглядит следующим образом:

TYPEMAP: <<EOT
crypto_generichash_state * T_PTRREF
EOT

Я предполагаю, что ошибки "not in typemap" являются результатом первоначальной ошибки, но я совершенно не разбираюсь в том, как создаются модули Perl;Я даже не уверен, что это за XS.Любые предложения о том, как продолжить?

1 Ответ

0 голосов
/ 27 октября 2018

Версия ExtUtils::ParseXS, поставляемая в комплекте с Centos 6, не поддерживает встроенную typemap.Установка последних ExtUtils::ParseXS и libsodium должна исправить проблему.

С https://perldoc.perl.org/perlxstypemap.html#Anatomy-of-a-typemap:

Традиционно, карты типов необходимо записывать в отдельный файл, обычноназывается typemap в распределении CPAN.В ExtUtils :: ParseXS (компилятор XS) версии 3.12 или выше, которая поставляется с perl 5.16, карты типов также могут быть встроены непосредственно в код XS с использованием синтаксиса, аналогичного HERE-doc:

TYPEMAP: <<HERE
...
HERE

, где HEREмогут быть заменены другими идентификаторами, как с обычными Perl HERE-docs.Все приведенные ниже сведения о текстовом формате карты типов действительны.

...