Компиляция библиотеки расширений PHP в Ubuntu (Karmic Koala) - PullRequest
4 голосов
/ 15 февраля 2010

Некоторое время назад я скомпилировал некоторые библиотеки расширений PHP (на C / C ++) на своей платформе XP. Теперь я переместил исходники в свою коробку Ubuntu и хочу собрать библиотеки для использования на моей Linux-системе.

Однако я столкнулся с рядом препятствий:

  1. Я не могу найти phpize (даже после установки пакета php5dev)
  2. Я не могу найти ext_skel для генерации скелета скрипта / файлов

[Изменить]

Благодаря Паскалю Мартину и этому вопросу мне удалось собрать и протестировать одну из моих небольших библиотек. Я просто хочу дважды проверить содержимое моего файла .m4 (так как я не знаком с форматом), прежде чем перейти к другим библиотекам.

Это содержимое автоматически сгенерированного файла .m4 - любой, кто знаком с форматом, может объяснить, что это значит, - так что я могу быть вдвойне уверен, что я раскомментировал правильные разделы файла.

Содержимое файла config.m4 отображается ниже во всех подробностях:

dnl $Id$
dnl config.m4 for extension tanlib

dnl Comments in this file start with the string 'dnl'.
dnl Remove where necessary. This file will not work
dnl without editing.

dnl If your extension references something external, use with:

dnl PHP_ARG_WITH(tanlib, for tanlib support,
dnl Make sure that the comment is aligned:
dnl [  --with-tanlib             Include tanlib support])

dnl Otherwise use enable:

PHP_ARG_ENABLE(tanlib, whether to enable tanlib support,
dnl Make sure that the comment is aligned:
[  --enable-tanlib           Enable tanlib support])

if test "$PHP_TANLIB" != "no"; then
  dnl Write more examples of tests here...

  dnl # --with-tanlib -> check with-path
  dnl SEARCH_PATH="/usr/local /usr"     # you might want to change this
  dnl SEARCH_FOR="/include/tanlib.h"  # you most likely want to change this
  dnl if test -r $PHP_TANLIB/$SEARCH_FOR; then # path given as parameter
  dnl   TANLIB_DIR=$PHP_TANLIB
  dnl else # search default path list
  dnl   AC_MSG_CHECKING([for tanlib files in default path])
  dnl   for i in $SEARCH_PATH ; do
  dnl     if test -r $i/$SEARCH_FOR; then
  dnl       TANLIB_DIR=$i
  dnl       AC_MSG_RESULT(found in $i)
  dnl     fi
  dnl   done
  dnl fi
  dnl
  dnl if test -z "$TANLIB_DIR"; then
  dnl   AC_MSG_RESULT([not found])
  dnl   AC_MSG_ERROR([Please reinstall the tanlib distribution])
  dnl fi

  dnl # --with-tanlib -> add include path
  dnl PHP_ADD_INCLUDE($TANLIB_DIR/include)

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

  dnl PHP_CHECK_LIBRARY($LIBNAME,$LIBSYMBOL,
  dnl [
  dnl   PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $TANLIB_DIR/lib, TANLIB_SHARED_LIBADD)
  AC_DEFINE(HAVE_TANLIBLIB,1,[ Whether you have tanlib])
  dnl ],[
  dnl   AC_MSG_ERROR([wrong tanlib lib version or lib not found])
  dnl ],[
  dnl   -L$TANLIB_DIR/lib -lm -ldl
  dnl ])
  dnl
  dnl PHP_SUBST(TANLIB_SHARED_LIBADD)

  PHP_NEW_EXTENSION(tanlib, tanlib.c, $ext_shared)
fi 

Кто-нибудь ухмыляется выше?

Кстати, указанный выше файл config.m4 был сгенерирован с использованием Autoconf 2.50 (я также только что видел документацию здесь и медленно перевариваю ее.

Ответы [ 2 ]

2 голосов
/ 15 февраля 2010

На моем компьютере с Ubuntu phpize находится в:

$ which phpize
/usr/bin/phpize


И ext_skel должен находиться в каталоге "ext", в источниках PHP, которые вы можете получить по SVN.

Вот каталог ext: http://svn.php.net/viewvc/php/php-src/trunk/ext/
И вы можете просмотреть содержание скрипта здесь .

README.EXT_SKEL чуть меньше trunk/.


Если вы являетесь большим пользователем git, на github есть зеркало SVN: http://github.com/php/

0 голосов
/ 28 февраля 2010

Чтобы ответить на ваш дополнительный вопрос, dnl - это маркер комментария к строке в .m4 файлах, поэтому эти строки в настоящее время ничего не делают. Это, вероятно, нормально, так как они в основном актуальны только в том случае, если вы используете внешнюю библиотеку (и по соглашению вместо параметра --enable-myextension) используется опция конфигурации --with-myextension.

Файл выше (по состоянию на редакцию 3), следовательно, эквивалентен:

PHP_ARG_ENABLE(tanlib, whether to enable tanlib support,
[  --enable-tanlib           Enable tanlib support])

if test "$PHP_TANLIB" != "no"; then
  AC_DEFINE(HAVE_TANLIBLIB,1,[ Whether you have tanlib])  
  PHP_NEW_EXTENSION(tanlib, tanlib.c, $ext_shared)
fi 

Так что, если вы выполните следующее в этом каталоге, оно должно работать (я думаю, у меня нет подходящего компьютера под управлением Linux, чтобы проверить это):

phpize
./configure --enable-tanlib
make
make install

Наконец, убедитесь, что расширение включено в /etc/php5/conf.d.

Помните, что вам нужно перезапустить apache (sudo /etc/init.d/apache2 restart), чтобы получить изменения в расширении.

...