تعارض تعريف الهيكل بين وحدة XS وبناء بيرل
سؤال
على OpenSolaris ($^o Eq 'Solaris' ، vers. 2.11) ، أحاول إنشاء وحدة XS التي تستخدم XPGv4v2/Single Unix Spec. فهم ل 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" */
....
توفير "الحق" #define
س (_XOPEN_SOURCE
و _XOPEN_SOURCE_EXTENDED
) يكسر البناء ، لأنه يغير العديد من الأشياء التي كان بيرل يتوقعها.
هل هناك طريقة أنيقة يمكنني الحصول على وحدة XS باستخدام تعريف الهيكل الذي أحبه؟
المحلول
يجب عليك إما استخدام التعريفات التي يفهمها Perl الحالي ، أو تجميع Perl جديد مع التعاريف التي تريدها.
لا تحتاج إلى استبدال Perl الحالي ، رغم ذلك. يمكنك تثبيت Perl الجديد بشكل منفصل حتى لا تتعارض.
إذا كنت تريد ذلك في كلا الاتجاهين ، فيجب عليك معرفة التعريفات التي لدى Perl الخاص بك وكتابة رمز مع مجموعة التعريفات الصحيحة. يمكنك إضافة طبقة من التجريد حتى تتمكن من تنفيذ البتات الأساسية مع أي من التعريفات. ربما يكون هناك الكثير من التعليمات البرمجية المتكررة ، ولكن هذا هو ماهية قابلية النقل ، للأسف. :(