在OpenSolaris($ ^ O eq' solaris',2.11版)中,我正在尝试构建一个使用XPGv4v2 / Single Unix Spec的XS模块。理解struct msghdr
,特别是“辅助数据”审讯。
但是,本机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
s(_XOPEN_SOURCE
和_XOPEN_SOURCE_EXTENDED
)会破坏构建,因为它会改变perl所期待的许多内容。
我是否有一种优雅的方式让XS模块使用我想要的结构定义?
答案 0 :(得分:2)
您必须使用现有perl可以理解的定义,或者使用您想要的定义编译新的perl。
但是,您不需要替换现有的perl。您可以单独安装新的perl,这样它们就不会发生冲突。
如果你想要两种方式,你必须弄清楚你的Perl有哪些定义,并编写处理正确定义的代码。您可以添加一个抽象层,以便可以使用任一组定义实现基础位。这可能是很多重复的代码,但不幸的是,这就是可移植性。 :(