17得票4回答
从零开始创建XS模块的现代方法是什么?

我需要为Perl编写一个XS模块。据我所知,h2xs在今天已经被基本弃用了,那么现在启动XS模块的首选方法是什么?我查看了Module::Starter,但它只处理纯Perl模块。

14得票1回答
在嵌入式C应用程序中从Perl调用C函数

这是一个非常有趣的问题,可能没有简单的方法来解决,但在决定修改Perl之前,我想先提出我的建议。 所以我有一个调用Perl脚本的C应用程序。它以嵌入式方式工作得很好,我可以传递信息并获得返回信息。然而,现在我的下一个目标是让我的嵌入式脚本能够调用一些在最初调用它的C应用程序中的函数。 这很...

10得票1回答
在XS代码中安全地释放资源(在作用域退出时运行析构函数)。

我正在编写一个XS模块。我分配一些资源(例如malloc()或SvREFCNT_inc()),然后进行涉及Perl API的操作,最后释放资源。这在普通的C语言中是没有问题的,因为C语言没有异常,但使用Perl API的代码可能会调用croak(),从而阻止正常的清理并泄漏资源。因此,除了相当...

10得票3回答
扩展Perl会破坏动态加载

我正在尝试将XS编译到perl中 [ed(ikegami): 这意味着他正在使用::MakeMaker的make perl来创建一个具有静态链接C供应商库的perl] 但是当我这样做时,新版本的perl不支持动态加载模块。每次我尝试运行带有use Socket(或任何其他模块)的perl代码时...

8得票2回答
使用Perl的ExtUtils::MakeMaker,我如何使用与我的XS模块相同的设置编译可执行文件?

假设有一个使用C库的Perl XS模块,并且存在正确设置所有头文件和库位置、编译器和链接器标志等的Makefile.PL。 现在,假设我想在该XS模块中包含一个使用相同底层C库的小型C程序。如何正确、平台无关地指定目标可执行文件,以便使用相同的设置和标志进行构建? 如果我执行以下操作: ...

8得票2回答
我需要确认使用newHV创建的HV是否需要释放?

如果我写了一些包含哈希的XS代码,我不希望将其返回给perl,那么我需要释放它吗?如果需要,该怎么做? 我想到的最接近的方法是hv_undef,但据我所知,这仅清除哈希的内容,而不是哈希本身。 HV* hash = newHV(); ... use the hash ... hv_unde...

8得票2回答
如何从Perl XS模块调用不同C源文件中的函数?

我正在使用Perl构建一个XS扩展,有两个文件: 一个C头文件(.h) 一个C源文件(.c) 目前我所做的是将所有C文件代码放在XS文件的Model=之前,并在Model=之后包装我想要的函数。 编译没有问题,我能够从perl中调用特定的函数。 但是我想将.xs文件与C文件分开。 ...

8得票1回答
这段代码中是否存在XS内存泄漏问题?

无法找到内存泄漏在这段代码中的发生位置。 基本上,我想为返回二维数组的C函数编写XS包装器。 C函数: int CW_returnArray(double** arrayDouble, int* count) { int number = 10; int index, i...

7得票3回答
什么工具可以帮助构建XS项目?

我最近开始学习使用perlxstut的XS,并且教程建议我使用旧的h2xs工具创建基于ExtUtils::MakeMaker的项目来创建我的模块。但是对于纯Perl项目,h2xs/EUMM长期以来已经不再受欢迎,而是更喜欢使用Module::Install、Module::Build或Dist...