gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:35:17 27 4
gpt4 key购买 nike

在 OpenSolaris ($^O eq 'solaris', vers. 2.11) 上,我正在尝试构建一个使用 XPGv4v2/Single Unix 规范的 XS 模块。认识struct msghdr ,专门用于“辅助数据”查询。

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

#include "EXTERN.h"
#include "perl.h" /* older, "msg_accrights"-style msghdr now visible */
#include "XSUB.h"

....
struct msghdr m;
m.msg_control = buf; /* ERROR, structure has no member named "msg_control" */
....

提供“正确的”#define(_XOPEN_SOURCE_XOPEN_SOURCE_EXTENDED)会破坏构建,因为它改变了很多 perl期待。

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

最佳答案

您要么必须使用现有 perl 理解的定义,要么使用您想要的定义编译一个新的 perl。

不过,您不需要替换现有的 perl。您可以单独安装新的 perl,这样它们就不会发生冲突。

如果你想要两种方式,你必须弄清楚你的 Perl 有哪些定义,并编写处理正确定义集的代码。您可以添加一个抽象层,以便您可以使用任一定义集来实现底层位。可能有很多重复的代码,但不幸的是,这就是可移植性。 :(

关于c - XS 模块和 perl 构建之间的结构定义冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2102503/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com