问题标签 [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 模块中的信号处理程序
对于一些基于 C 的库,我有非常简单的构造函数和析构函数。好吧,我需要捕获像 TERM 和其他信号这样的信号来强制调用 perl 强制死亡的析构函数,killall perl
例如实际上我需要本地 $SIG{ TERM } 来安装每个要安装的对象,在 XS 构造函数中编写。可能吗?!谢谢!
perl - 什么时候应该使用 XS?
我正在写一篇关于 XS 的演讲,我需要知道社区何时认为使用 XS 是合适的。
c++ - 如何可移植地检测编译器是否支持对比
我正在开发一个需要能够在标准 C++ 编译器和预标准编译器上编译的实用程序。代码可以并且将被抛出几乎所有现有的 C++ 编译器。
我正在寻找一种方法来稳健且可移植地确定目标编译器是否支持带有或不带有 .h 扩展名的头文件。我还需要检测是否支持命名空间。这两种需求都可能是可能的,也可能是不可能的。
一点背景知识:该实用程序是 Perl 的 Inline::CPP 语言扩展。该扩展自动包含<iostream>
,并尝试很好地猜测是否需要 '.h'(当然还有编译器是否支持命名空间)。但在这方面它远非完美,而且这个问题正在减少实用程序的用途的广度。
所以重申这个问题:我如何可移植地检测编译器是否支持标准头文件,例如<iostream>
,或预标准头文件,例如<iostream.h>
?
perl - 扩展 Perl 正在破坏动态加载
我正在尝试将 XS 编译成 perl [ed(ikegami): 这就是说他正在使用 ::MakeMaker'smake perl
创建一个perl
带有静态链接的 C 供应商库]但是当我这样做时,新版本的 perl 不支持动态加载模块。每当我尝试运行具有类似use Socket
(或任何其他模块)的 perl 代码时,我都会得到:
是否有我设置不正确的编译器/链接器开关或什么?所有这些都是在 1998 年和 2004 年在另一个盒子上编译的(在 PA-RISC 上旧的 hpux),但我们正在转向一个新盒子(hpux11 itanium),我正在碰壁。
这是我的 Makefile.PL:
这是我的 .xs 文件,Udtutil.xs
当我运行时perl Makefile.PL
,一切看起来都很好:
当我运行make
ormake perl
时,一切顺利,它会创建一个新的本地 perl 二进制文件。
但是,当我执行时./perl mytest.pl
,如果mytest.pl
*使用*s 任何模块,我会得到:
关于如何编译这个新的 perl 并仍然保持动态加载工作的任何建议?
附加信息:
这是旧盒子(有效的)的配置数据:
...这是来自新盒子的配置数据(不工作的盒子):
c - 如何在 XS 代码中逐字符处理字符串
假设有这样一段代码:
并且my_subroutine()
应该作为 Perl XS 代码来实现。例如,它可以返回 (unicode) 字符串的字节总和。
在 XS 代码中,如何处理字符串(a) char by char,作为一般方法,以及(b)逐字节,如果字符串由 ASCII 码子集组成(从原生转换的内置函数字符串的数据结构到 char[]) ?
perl - 如何在 perl-xs 模块中嵌入 Perl 代码?
我编写了一个 Perl 模块来创建一个与 h2xs 的共享库的绑定。简单易做。
但是,我现在想在这个模块中包含一些 Perl 助手。我该怎么做呢?我假设它需要进入“blah.pm”文件 - 但这个文件是由构建生成的。
是否有一种(简单的)方法来指定要包含在其中的代码体?
perl - 我是否必须释放使用 newHV 创建的 HV*?
如果我编写了一些 XS 代码,其中包含我从未期望返回到 perl 的哈希值,我是否必须释放它?如果是这样,怎么做?
我想出的最接近的是 hv_undef,但据我所知,这只是清除散列的内容,而不是散列本身。
perl - 在 OpenBSD 上构建 perl 扩展模块
.so
当缺少必要的文件时,我应该如何在 OpenBSD 上构建 XS perl 模块?
背景:在香草 OpenBSD 5.3 vm 安装中,我无法构建需要链接到-lpthread
. pthread.a 和 pthread.so.Maj.Min确实存在于系统中。
但是 Makefile.PL 正在寻找pthread.so
,这是不存在的。这对于 OpenBSD 来说很普通吗?(我可以强制 Makefile 链接到 pthread.a 并且事情工作得很好,因为它发生了。)
在 Redhat-ish Linux 环境中,我只需安装正确的-devel
RPM 并再次运行。然而,在 OpenBSD 上,我缺少一些关于开发环境的非常基本的东西。
更新核心问题是 Dynaloader 错误检测 Makefile.PL 中的库。
perl - 为系统调用 getpagesize 编写 Sys::Getpagesize Perl 模块(手册页 GETPAGESIZE(2))
我的任务是编写一个需要我使用 Perl XS 的 Perl 模块。我从未使用过 Perl XS,但我查看了这里的文档:http: //perldoc.perl.org/perlxs.html,看起来我需要getpagesize
系统调用的 C 源代码。getpagesize.c
我试着像这样寻找yum
...
...但我似乎没有任何 RPM 可以提供getpagesize.c
.
那里的任何人都可以帮助我摆脱我似乎已经进入的沟渠吗?
谢谢
perl - 为什么调用 `call_pv()` 时应用程序崩溃?
我们正在调用一个子例程process_input
,call_pv
它是从一个处理最大为 1 MB 大小的文本输入的进程代码中调用的。该过程执行以下操作:
- 它吃掉任何 maileater 客户端的邮件
- 在应用程序中创建新票证
- 如果邮件大小> 1 MB,则回复
我最近发送了一个大约 800 KB 的文件,这导致进程不断崩溃,直到 2 GB 并崩溃。这是电话:
任何想法都会有所帮助。有什么替代方法call_pv
吗?
其他详细信息:电子邮件中发送的文本包含重音字符。