代码之家  ›  专栏  ›  技术社区  ›  eli

使用libtidy编译的PHP扩展,但不加载

  •  8
  • eli  · 技术社区  · 15 年前

    我在C++中写了一个使用LbTiDy的扩展,并且在编译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
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   OJ287    15 年前

    您是否使用与普通PHP相同的PHP版本编译了扩展?您应该使用相同版本的PHP源。 此外,确保在php.ini文件中,在扩展名之前加载了“libtidy”扩展名。