1

系统安装的 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

第715 行周围的部分如下所示:

TYPEMAP: <<EOT
crypto_generichash_state * T_PTRREF
EOT

我假设“不在类型映射中”错误是最初错误的结果,但我对 Perl 模块的构建方式完全没有经验;我什至不确定这个 XS 的东西是什么。关于如何继续的任何建议?

4

1 回答 1

4

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

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

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

TYPEMAP: <<HERE
...
HERE

whereHERE可以被其他标识符替换,比如普通的 Perl HERE-docs。以下关于类型映射文本格式的所有详细信息仍然有效。

于 2018-10-27T12:06:14.100 回答