ExtUtils::ParseXS - 将 Perl XS 代码转换为 C 代码
use ExtUtils::ParseXS;
my $pxs = ExtUtils::ParseXS->new;
$pxs->process_file( filename => 'foo.xs' );
$pxs->process_file( filename => 'foo.xs',
output => 'bar.c',
'C++' => 1,
typemap => 'path/to/typemap',
hiertype => 1,
except => 1,
versioncheck => 1,
linenumbers => 1,
optimize => 1,
prototypes => 1,
die_on_error => 0,
);
# Legacy non-OO interface using a singleton:
use ExtUtils::ParseXS qw(process_file);
process_file( filename => 'foo.xs' );
ExtUtils::ParseXS
会通过嵌入必要的构造来编译 XS 代码为 C 代码,以便 C 函数可以操作 Perl 值,并创建必要的胶水代码,以便 Perl 可以访问这些函数。编译器使用类型映射来确定如何将 C 函数参数和变量映射到 Perl 值。
编译器会搜索名为 typemap 的类型映射文件。它会使用以下搜索路径来查找默认类型映射,最右边的类型映射优先。
../../../typemap:../../typemap:../typemap:typemap
默认情况下没有。process_file()
和/或 report_error_count()
可以根据请求导出。不建议使用函数接口。
返回一个新的空 XS 解析器/编译器对象。
此方法处理 XS 文件并将输出发送到 C 文件。此方法可作为函数调用(这是旧版接口),然后将使用单例作为调用者。
命名参数控制处理方式。接受以下参数
将 extern "C"
添加到 C 代码。默认为 false。
在类型名称中保留 ::
,以便可以映射 C++ 层次结构类型。默认为 false。
将异常处理存根添加到 C 代码。默认为 false。
表示用户提供的类型映射应优先于默认类型映射。可以将单个类型映射指定为字符串,也可以在数组引用中指定多个类型映射,其中最后一个类型映射具有最高优先级。
为所有 xsub 生成原型代码。默认为 false。
确保在运行时,对象文件(源自 .xs
文件)和 .pm
文件具有相同的版本号。默认为 true。
将 #line
指令添加到 C 输出,以便错误消息看起来像是来自原始 XS 文件。默认为 true。
启用某些优化。目前唯一受影响的优化是输出 C 代码使用 target(请参阅 perlguts)。不优化可能会显著降低生成代码的速度,但这是 5.005 及更早版本的 xsubpp 的操作方式。默认为优化。
启用对 IN
、OUT_LIST
和 INOUT_LIST
声明的识别。默认为 true。
启用对函数签名的类似 ANSI 的描述的识别。默认为 true。
维护者注:我不知道它有什么作用。删除函数前缀?
通常,ExtUtils::ParseXS 会在通过 (warn) 向 STDERR 打印异常详细信息后,使用 exit(1)
终止程序。当以编程方式使用它而不是通过 xsubpp 使用它时,这可能会很尴尬,因此可以使用此选项通过提供真值来让它改为 die。如果未提供,则默认为 $ExtUtils::ParseXS::DIE_ON_ERROR
的值,而后者又默认为 false。
此方法返回在处理 XS 文件期间遇到的 [某种类型的] 错误的数量。
该方法可以作为函数调用(这是旧版接口),然后将使用单例作为调用者。
基于 Larry Wall 编写的 xsubpp 代码。
由以下人员维护
Ken Williams,<[email protected]>
David Golden,<[email protected]>
James Keenan,<[email protected]>
Steffen Mueller,<[email protected]>
版权所有 2002-2014 Ken Williams、David Golden 和其他贡献者。保留所有权利。
此库是免费软件;您可以在与 Perl 本身相同的条款下重新分发和/或修改它。
基于 Larry Wall 和 Perl 5 Porters 的 ExtUtils::xsubpp
代码,该代码在相同的许可条款下发布。