问题标签 [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.
perl - 从头开始创建 XS 模块的现代方法是什么?
我需要为 Perl 编写一个 XS 模块。据我了解,h2xs 今天几乎已被弃用,今天启动 XS 模块的首选方法是什么?我查看了 Module::Starter,但它只处理纯 Perl 模块。
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 时,我只需要更改版本并重新制作。
有小费吗?
perl - 如何在 XS 中编写 Perl 构造函数?
我正在尝试为 Perl 编写新的 XS 模块。我已经按照 XS 模块编写说明进行了测试,它工作正常。
我无法理解如何new
为 XS 编写方法
我有一个名为Agent
. 我希望能够做到这样的事情:
c - XS 模块和 perl 构建之间的结构定义冲突
在 OpenSolaris($^O eq 'solaris',版本 2.11)上,我正在尝试构建一个使用 XPGv4v2/Single Unix Spec 的 XS 模块。了解struct msghdr
,专门针对“辅助资料”的审讯。
然而,原生 perl (v5.8.4) 是在没有必要定义的情况下构建的,因此struct msghdr
在我的 XS 文件中可见的是较旧的 BSD 类型::
提供“正确的” #define
s (_XOPEN_SOURCE
和_XOPEN_SOURCE_EXTENDED
) 会破坏构建,因为它改变了 perl 所期望的许多事情。
有没有一种优雅的方式可以让 XS 模块使用我想要的结构定义?
perl - 如何判断 C 结构是否在 Perl XS 中有成员?
是否有ExtUtils::*
或Module::Build
(或其他)类似于 Ruby 的mkmf.have_struct_member
?
我想做类似的事情(以提示/文件的方式):
Config.pm
不跟踪我正在寻找的具体信息,ExtUtils::FindFunctions
在这里似乎不太合适......
perl - 如何唯一标识对函数的所有调用?
我知道这caller
会给我调用函数的文件名和行号,但是如何获取字符或字节偏移量?如果我必须为它下降到 XS 也没关系(无论如何,该功能可能最终会成为 XS)。
我要做的是唯一标识对函数的所有调用,因此,如果有比源中的位置更好的方法,我对其他路线持开放态度。
基本意图是创建一个each
可以安全地迭代相同哈希的函数。这是一个纯 Perl 版本,类似于我的想法:
perl - 哪些工具可以帮助构建 XS 项目?
我最近开始使用perlxstut学习 XS ,教程建议我使用旧的h2xs工具创建我的模块,以创建基于ExtUtils::MakeMaker的项目。然而对于纯粹的 Perl 项目,h2xs/EUMM 长期以来一直不赞成Module::Install、Module::Build或Dist::Zilla。
有没有更现代的方式来创建 XS 项目?Module::Starter可以创建 XS 项目吗?Module::Build 或 Dist::Zilla 可以构建 XS 项目吗?他们的 pod 页面对此事保持沉默。
另一方面,针对 h2xs/EUMM 的批评是否适用于 XS 项目?如果你无论如何都需要一个 C 编译器,那么也需要一个 make 工具是否合理?
编辑:我看到这个问题回答了我关于创建项目的问题。我仍然想知道关于构建:EUMM 是唯一的选择,还是 Module::Build 和 Dist::Zilla 也能够构建 XS?
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()
在.c
my 生成的中看到了对 的调用.xs
,但未能找到该函数的任何文档。
Perl 的 XS 模拟是die
什么?或者 XSUB 如何向 Perl 运行时报告函数失败并且没有 RETVAL 可返回?如何正确设置$@
?
c - 在嵌入式 C 应用程序中从 Perl 调用 C 函数
好的,这是一个非常有趣的问题,可能没有任何简单的方法可以做到这一点,但我想我会在决定修改 Perl 是我的基本答案之前把它扔掉。
所以我有一个以嵌入式方式调用 Perl 脚本的 C 应用程序。这一切都工作得很好而且很漂亮,而且我可以传递信息并取回信息真是太棒了。但是,现在开始我的下一个征服;我需要允许我的嵌入式脚本能够调用最初调用它的 C 应用程序中的一些函数。
这很重要,因为 XSUB 要求它是一个外部库;但我不希望它成为一个外部库,我希望它是对 C 函数的直接调用。现在也许这可以通过 XSUB 完成,但我一直在阅读和理解错误。
这不能是外部库的原因是因为我依赖于仅在应用程序中创建/存储的数据。
perl - 将 XS 代码集成到 Moose 类定义文件中
我已经编写了一个基于 XS 的 Perl 模块,它提供了对 C 库中函数的访问 - 现在我们称之为 MyLib_XS。我想从这里开始,使用这些函数在 Moose 类中定义方法。当然,我可以use MyLib_XS;
在我的 Moose 类定义模块中并在我的类方法中调用函数——一切正常。但是,我想知道我是否可以做得更好
是否可以在不使用中间模块 MyLib_XS.pm 的情况下将我的 .xs 文件与基于 Moose 的类集成并从类中的方法调用在 XS 文件中实现的函数?
任何指向 CPAN 上执行此操作的模块的指针也会很棒。谢谢