ربط ملحق PHP مكتوب في ج
-
19-09-2019 - |
سؤال
تحرير: مراجعة سؤالي
عند بناء وحدة 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 هنا, ، ولكن للحوم التي تحتاجها حقا كتابها.