Расширение PHP с использованием libtidy компилируется, но не загружается

Я написал расширение на C++, которое использует libtidy, и оно отлично работает под PHP, когда я компилирую PHP --with-tidy.

Однако было бы неплохо, чтобы расширение работало на ванильном PHP. Когда я пытаюсь использовать расширение, я получаю что-то вроде:

PHP Warning:   
  PHP Startup: 
    Unable to load dynamic library 'extension.so': 
      undefined symbol: tidyCleanAndRepair in Unknown on line 0

и расширение не загружается.

Очевидно, официальное расширение приборки работает нормально. У меня в системе установлены соответствующие пакеты разработки libtidy, и они без проблем компилируются+ссылки. Я пытался просмотреть код аккуратного расширения, но это огромная масса макросов - копирование фрагментов наугад ощущалось как грузовой код.

Помимо ссылки на библиотеку с помощью PHP_ADD_LIBRARY_WITH_PATH(tidy, $TIDY_LIBDIR, TIDY_SHARED_LIBADD), есть ли расширение PHP или инструкция C, которая исправляет эту ошибку?

Заранее спасибо!!

РЕДАКТИРОВАТЬ: вот весь файл config.m4:

dnl config.m4 for extension htmlparser

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

if test "$PHP_HTMLPARSER" != "no"; then


  if test -r $PHP_LIBXML2/lib/libxml2.a; then
    LIBXML2_DIR=$PHP_LIBXML2
  else
    AC_MSG_CHECKING(for libxml2 in default path)
    for i in /usr/local /usr; do
      if test -r $i/lib/libxml2.a; then
        LIBXML2_DIR=$i
        AC_MSG_RESULT(found in $i)
      fi
    done
  fi

  if test -z "$LIBXML2_DIR"; then
    AC_MSG_RESULT(not found)
    AC_MSG_ERROR(Please reinstall the libxml2 distribution - libxml2.h should
                 be in <libxml2-dir>/include and libxml2.a should be in <libxml2-    dir>/lib)
  fi
  PHP_ADD_INCLUDE($LIBXML2_DIR/include/libxml2)
  PHP_ADD_LIBRARY_WITH_PATH(libxml2, $LIBXML2_DIR/lib, LIBXML2_SHARED_LIBADD)

  AC_MSG_CHECKING(for boost in default path)
  for i in /usr/local /usr; do
    if test -r $i/include/boost; then
      BOOST_DIR=$i
      AC_MSG_RESULT(found in $i)
    fi
  done

  if test -z "$BOOST_DIR"; then
    AC_MSG_RESULT(not found)
    AC_MSG_ERROR(Please reinstall the boost distribution!!!)
  fi
  PHP_ADD_INCLUDE($BOOST_DIR/include/boost/)


    TIDY_SEARCH_DIRS="/usr/local /usr"
    for i in $TIDY_SEARCH_DIRS; do
        if test -f $i/include/tidy/tidy.h; then
            TIDY_DIR=$i
            TIDY_INCDIR=$i/include/tidy
        elif test -f $i/include/tidy.h; then
            TIDY_DIR=$i
            TIDY_INCDIR=$i/include
        fi
    done


    if test -z "$TIDY_DIR"; then
        AC_MSG_ERROR(Cannot find libtidy)
    fi

  TIDY_LIBDIR=$TIDY_DIR/lib

  PHP_ADD_INCLUDE($TIDY_INCDIR)
  PHP_ADD_LIBRARY_WITH_PATH(tidy, $TIDY_LIBDIR, TIDY_SHARED_LIBADD)

  PHP_CHECK_LIBRARY(tidy,tidyOptGetDoc,
  [
  AC_DEFINE(HAVE_TIDYOPTGETDOC,1,[ ])
  ],[],[])

  AC_DEFINE(HAVE_HTMLPARSER, 1, [Whether you want htmlparser support])
  PHP_SUBST(HTMLPARSER_SHARED_LIBADD)
  PHP_ADD_LIBRARY_WITH_PATH(stdc++, 1, HTMLPARSER_SHARED_LIBADD)
  PHP_REQUIRE_CXX()
  PHP_NEW_EXTENSION(htmlparser, php_htmlparser.cpp parsehtml.cpp StringBuilder.cpp,     $ext_shared)
fi

person eli    schedule 05.06.2010    source источник
comment
Пожалуйста, предоставьте полный файл config.m4   -  person johannes    schedule 05.06.2010
comment
Я новичок в StackOverflow. Мы уже отказались от добавления libtidy в проект, и я не знаю, удалять этот вопрос или нет (люди добавили его в избранное). Что я должен делать?   -  person eli    schedule 09.06.2010
comment
@ewokker Оставь это. Может кто ответит.   -  person Artefacto    schedule 12.06.2010
comment
Спасибо, в вашем вопросе нашел ответ как включить буст в модуль   -  person WooDzu    schedule 18.07.2013


Ответы (1)


Вы скомпилировали свое расширение с той же версией php, что и ванильный php? вы должны использовать исходники php той же версии. кроме того, убедитесь, что в файле php.ini вы загрузили расширение «libtidy» перед своим расширением.

person OJ287    schedule 13.07.2010
comment
Спасибо за ответ. Как я уже упоминал в комментарии выше, проект продвинулся дальше. Тем не менее, это кажутся хорошими указаниями при устранении неполадок в следующий раз. - person eli; 18.07.2010