问题标签 [perl-xs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
824 浏览

perl - 从头开始创建 XS 模块的现代方法是什么?

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

0 投票
2 回答
1562 浏览

perl - 为什么我在使用 Perl 5.10 编译 XS 时会出现“未定义的引用”错误?

我有一个 C++ 对象,我正在使用 Perl XS 将其转换为 Perl。此过程适用于 Perl 5.8.5 和 5.8.7。但是,一旦我尝试使用 Perl 5.10.0,就会遇到很多编译错误。他们中的大多数人都是这样的:

这告诉我,由于某种原因,Perl XS 的东西没有正确链接。当我从 5.8.5 升级到 v5.8.7 时,我只需要更改版本并重新制作。

有小费吗?

0 投票
3 回答
581 浏览

perl - 如何在 XS 中编写 Perl 构造函数?

我正在尝试为 Perl 编写新的 XS 模块。我已经按照 XS 模块编写说明进行了测试,它工作正常。

我无法理解如何new为 XS 编写方法

我有一个名为Agent. 我希望能够做到这样的事情:

0 投票
1 回答
205 浏览

c - XS 模块和 perl 构建之间的结构定义冲突

在 OpenSolaris($^O eq 'solaris',版本 2.11)上,我正在尝试构建一个使用 XPGv4v2/Single Unix Spec 的 XS 模块。了解struct msghdr,专门针对“辅助资料”的审讯。

然而,原生 perl (v5.8.4) 是在没有必要定义的情况下构建的,因此struct msghdr在我的 XS 文件中可见的是较旧的 BSD 类型::

提供“正确的” #defines (_XOPEN_SOURCE_XOPEN_SOURCE_EXTENDED) 会破坏构建,因为它改变了 perl 所期望的许多事情。

有没有一种优雅的方式可以让 XS 模块使用我想要的结构定义?

0 投票
2 回答
186 浏览

perl - 如何判断 C 结构是否在 Perl XS 中有成员?

是否有ExtUtils::*Module::Build(或其他)类似于 Ruby 的mkmf.have_struct_member

我想做类似的事情(以提示/文件的方式):

Config.pm不跟踪我正在寻找的具体信息,ExtUtils::FindFunctions在这里似乎不太合适......

0 投票
1 回答
145 浏览

perl - 如何唯一标识对函数的所有调用?

我知道这caller会给我调用函数的文件名和行号,但是如何获取字符或字节偏移量?如果我必须为它下降到 XS 也没关系(无论如何,该功能可能最终会成为 XS)。

我要做的是唯一标识对函数的所有调用,因此,如果有比源中的位置更好的方法,我对其他路线持开放态度。

基本意图是创建一个each可以安全地迭代相同哈希的函数。这是一个纯 Perl 版本,类似于我的想法:

0 投票
3 回答
866 浏览

perl - 哪些工具可以帮助构建 XS 项目?

我最近开始使用perlxstut学习 XS ,教程建议我使用旧的h2xs工具创建我的模块,以创建基于ExtUtils::MakeMaker的项目。然而对于纯粹的 Perl 项目,h2xs/EUMM 长期以来一直不赞成Module::InstallModule::BuildDist::Zilla

有没有更现代的方式来创建 XS 项目?Module::Starter可以创建 XS 项目吗?Module::Build 或 Dist::Zilla 可以构建 XS 项目吗?他们的 pod 页面对此事保持沉默。

另一方面,针对 h2xs/EUMM 的批评是否适用于 XS 项目?如果你无论如何都需要一个 C 编译器,那么也需要一个 make 工具是否合理?

编辑:我看到这个问题回答了我关于创建项目的问题。我仍然想知道关于构建:EUMM 是唯一的选择,还是 Module::Build 和 Dist::Zilla 也能够构建 XS?

0 投票
1 回答
866 浏览

perl - Perl 的 XSUB 怎么会死?

我为一个包含大约 80 个函数的 C 库编写了一个 Perl XS 包装器。现在我的一般策略是用 C 函数中的错误替换,PL_sv_undef调用 Perl 代码必须明确检查返回是否不是undef。(对于某些 C 函数,它更复杂,因为我将它们的输出转换为HV/AV并使用空列表来报告错误。)

现在,当我开始使用该库编写更大的 Perl 脚本时,我想简化错误处理并使用例如通常eval {}/die类似异常的机制来处理错误。

目前,我的 XS 中的一个简单 XSUB 看起来像这样:

我已经看到一些模块具有全局标志,例如“RaiseError”到die错误但找不到任何我可以借用的示例。我发现的几个模块处理的是内部的“RaiseError”标志.pm,而不是内部的.xs,因此允许使用 Perl 的die. .pm在我的情况下,由于许多功能需要特殊的错误检查,所以很难在其中实现。这也会导致代码重复,因为 XS 中已经存在检查。

perlxs我在/perlguts文档中没有发现任何相关内容。特别是,我Perl_croak().cmy 生成的中看到了对 的调用.xs,但未能找到该函数的任何文档。

Perl 的 XS 模拟是die什么?或者 XSUB 如何向 Perl 运行时报告函数失败并且没有 RETVAL 可返回?如何正确设置$@

0 投票
1 回答
2584 浏览

c - 在嵌入式 C 应用程序中从 Perl 调用 C 函数

好的,这是一个非常有趣的问题,可能没有任何简单的方法可以做到这一点,但我想我会在决定修改 Perl 是我的基本答案之前把它扔掉。

所以我有一个以嵌入式方式调用 Perl 脚本的 C 应用程序。这一切都工作得很好而且很漂亮,而且我可以传递信息并取回信息真是太棒了。但是,现在开始我的下一个征服;我需要允许我的嵌入式脚本能够调用最初调用它的 C 应用程序中的一些函数。

这很重要,因为 XSUB 要求它是一个外部库;但我不希望它成为一个外部库,我希望它是对 C 函数的直接调用。现在也许这可以通过 XSUB 完成,但我一直在阅读和理解错误。

这不能是外部库的原因是因为我依赖于仅在应用程序中创建/存储的数据。

0 投票
1 回答
214 浏览

perl - 将 XS 代码集成到 Moose 类定义文件中

我已经编写了一个基于 XS 的 Perl 模块,它提供了对 C 库中函数的访问 - 现在我们称之为 MyLib_XS。我想从这里开始,使用这些函数在 Moose 类中定义方法。当然,我可以use MyLib_XS;在我的 Moose 类定义模块中并在我的类方法中调用函数——一切正常。但是,我想知道我是否可以做得更好

是否可以在不使用中间模块 MyLib_XS.pm 的情况下将我的 .xs 文件与基于 Moose 的类集成并从类中的方法调用在 XS 文件中实现的函数?

任何指向 CPAN 上执行此操作的模块的指针也会很棒。谢谢