XSモジュールとperlのビルド間の構造定義の競合
質問
にOpenSolaris($ ^ O EQ 'のSolaris'、VERS。2.11)、IはXPGv4v2 /シングルUnixの仕様を使用して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モジュールを使用することができますエレガントな方法はありますか?
解決
あなたのいずれか、既存のperlが理解できる定義を使用するか、またはあなたがしたいことを定義して新しいPerlをコンパイルする必要があります。
あなたはかかわらず、既存のPerlを交換する必要はありません。彼らが競合しないようにするには、別途新しいPerlをインストールすることができます。
あなたはそれを両方の方法をしたい場合は、は、あなたのPerlが定義のハンドルを右に設定することを持っていると書き込みコード画成どの把握する必要があります。あなたが定義のいずれかをセットで基礎となるビットを実装できるように、抽象化の層を追加できます。残念ながら、それはおそらく、繰り返し多くのコードですが、どのような可搬性のがあること。 :(
所属していません StackOverflow