سؤال

تحرير: مراجعة سؤالي

عند بناء وحدة PHP الخارجية في C، كيف أربط كائنات مشتركة؟

هل كانت مفيدة؟

المحلول

إذا كان رمز التمديد C الخاص بك يستخدم مكتبة مشتركة، فأنت بحاجة إلى إعلان ذلك في config.m4 ملف.

أنا بقوة يوصي باستخدام ext_skel البرنامج النصي المضمن في مصدر PHP لإنشاء تكوين هيكل عظمي.m4:

./ext_skel --extname=myextension

نظرا لأنك تربط بمكتبة، من خلال الاتفاقية، يجب عليك استخدام --with-myextension خيارات (على عكس --enable-myextension). uncomment الأسطر ذات الصلة في config.m4 وملء تفاصيل ليب الخاص بك.

شيء مثل ما يلي:

  # --with-myextension -> check for lib and symbol presence
  LIBNAME=the_lib_your_extension_needs # you may want to change this
  LIBSYMBOL=some_symbol_in_the_lib_you_extension_needs # you most likely want to change this 

  PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
  [
    PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $MYEXTENSION_DIR/lib, MYEXTENSION_SHARED_LIBADD)
    AC_DEFINE(HAVE_MYEXTENSIONLIB,1,[ ])
  ],[
    AC_MSG_ERROR([wrong $LIBNAME lib version or lib not found])
  ],[
    -L$MYEXTENSION_DIR/lib -ldl
  ])

ثم لبناءها، تشغيل:

phpize
./configure --with-myextension
make

أخيرا تحتاج إلى نسخ الوحدة النمطية الخاصة بك (أو ln -s) إلى أي مكان يتوقع نظامك العثور عليه.

إذا كان هذا يعمل بعد ذلك php -m يجب أن تتضمن الوحدة النمطية الخاصة بك في القائمة.

لسوء الحظ، لم أجد أبدا مرجعا جيدا عبر الإنترنت بأوامر Config.m4 PHP - الكتب لذلك سارة جوليمون تمديد وتضمين PHP وأيضا أجزاء من جورج شلوسنااجل برمجة PHP المتقدمة.

هناك دليل مبتدئين معقولين لخلق ملحقات PHP بواسطة Sara Goleman هنا, ، ولكن للحوم التي تحتاجها حقا كتابها.

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