3

OpenSolaris ($^O eq 'solaris'、バージョン 2.11) で、XPGv4v2/Single Unix Spec を使用する XS モジュールを構築しようとしています。の理解struct msghdr、特に「補助データ」の調査について。

ただし、ネイティブ perl (v5.8.4) は必要な定義なしでビルドされているため、struct msghdr私の XS ファイル内に表示されるのは古い 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" */
....

"正しい" #defines ( _XOPEN_SOURCEand _XOPEN_SOURCE_EXTENDED) を指定すると、ビルドが壊れます。これは、perl が予期していた非常に多くのことが変更されるためです。

XS モジュールに構造定義を使用させるエレガントな方法はありますか?

4

1 に答える 1

2

既存の perl が理解できる定義を使用するか、必要な定義で新しい perl をコンパイルする必要があります。

ただし、既存の perl を置き換える必要はありません。競合しないように、新しい perl を個別にインストールできます。

両方の方法が必要な場合は、Perl が持つ定義を把握し、適切な定義セットを処理するコードを作成する必要があります。抽象化のレイヤーを追加して、いずれかの定義セットで基になるビットを実装できるようにする場合があります。おそらくコードの繰り返しが多いのでしょうが、残念ながらそれが移植性です。:(

于 2010-01-20T16:14:39.763 に答える