无法在CentOS 6上编译Crypt :: Sodium

时间:2018-10-16 19:31:52

标签: perl perl-xs

系统安装的Perl是5.10.1版,我知道它是旧的;这些就是基于RHEL发行版的乐趣!无论使用cpan还是下载模块并make都得到相同的结果:

/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

line 715周围的部分如下所示:

TYPEMAP: <<EOT
crypto_generichash_state * T_PTRREF
EOT

我认为“ not in typemap”错误是最初的结果,但是我对Perl模块的构建方式完全没有经验。我什至不知道这是XS的东西。有什么建议继续吗?

1 个答案:

答案 0 :(得分:4)

Centos 6附带的ExtUtils::ParseXS版本不支持嵌入式typemap。安装最新的ExtUtils::ParseXSlibsodium应该可以解决此问题。

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

  

传统上,类型映射需要写入一个单独的文件,在CPAN发行版中通常称为typemap。使用Perl 5.16随附的ExtUtils :: ParseXS(XS编译器)3.12或更高版本时,也可以使用HERE-doc这样的语法将类型映射直接嵌入XS代码中:

TYPEMAP: <<HERE
...
HERE
     

其中HERE可以被其他标识符替换,例如普通的Perl HERE-docs。以下有关Typemap文本格式的所有详细信息仍然有效。