سؤال

على 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 الخاص بك وكتابة رمز مع مجموعة التعريفات الصحيحة. يمكنك إضافة طبقة من التجريد حتى تتمكن من تنفيذ البتات الأساسية مع أي من التعريفات. ربما يكون هناك الكثير من التعليمات البرمجية المتكررة ، ولكن هذا هو ماهية قابلية النقل ، للأسف. :(

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top