系统安装的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的东西。有什么建议继续吗?
答案 0 :(得分:4)
Centos 6附带的ExtUtils::ParseXS
版本不支持嵌入式typemap
。安装最新的ExtUtils::ParseXS
和libsodium
应该可以解决此问题。
来自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文本格式的所有详细信息仍然有效。