如何通过 SPVM 使用 Perl 中的 zlib(一个 C 库)。
查看将 zlib 绑定到 SPVM 的示例
SPVM 提供了一种绑定 C 语言库并从 Perl 调用它们的方法。
将 C 库绑定到 Perl 时,通常会编写 XS,但 SPVM 提供了另一种方法。
MyZlib.spvm
类 MyZlib {
本机静态方法测试:void($ouf_file:string);
}
MyZlib.c
#include“spvm_native.h”
#include<stdio.h>
#include“zlib.h”
静态 const char* FILE_NAME = "MyZlib.c";
int32_t SPVM__MyZlib__test(SPVM_ENV* env, SPVM_VALUE* 堆栈) {
void* obj_out_file = stack[0].oval;
如果(!obj_out_file){
return env->die(env, stack, "$ouf_file 必须被定义。", __func__, FILE_NAME, __LINE__);
}
const char* out_file = env->get_chars(env, stack, obj_out_file);
char buf[]="0123456789abcdefghijklmnopqrstuvwxyzn";
整数cnt = 0;
gz文件 zp;
zp = gzopen(out_file, "w9");
如果(zp == NULL){
return env->die(env, stack, "gzopen 失败。", "MyZlib.c", __func__, FILE_NAME, __LINE__);
}
for(cnt = 0;cnt
<p>MyZlib.config<br></p>
<pre class="brush:php;toolbar:false">使用严格;
使用警告;
使用 SPVM::Builder::Config;
我的 $config = SPVM::Builder::Config->new_gnu99(file => __FILE__);
$config->add_lib('z');
$配置;
zlib.pl
使用严格;
使用警告;
使用FindBin;
使用 lib“$FindBin::Bin/lib”;
使用 SPVM 'MyZlib';
我的 $out_file = "$ENV{HOME}/tmp/output.gz";
SPVM::MyZlib->测试($out_file);
将输出一个压缩文件“output.gz”。