2010-06-05 105 views
8

我在使用libtidy的C++中編寫了一個擴展,當我編譯PHP --with-tidy時,它在PHP下運行完美。使用libtidy編譯但不加載的PHP擴展

但是,最好能在香草PHP上運行擴展。當我嘗試使用擴展名時,出現如下所示:

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

並且擴展未加載。

顯然,官方的整潔擴展工作正常。我在系統上安裝了相關的libtidy開發包,它編譯+鏈接沒有問題。我試圖通過代碼來查看整潔的擴展,但它是一大堆宏 - 隨機複製件感覺像貨代碼。

除了鏈接到庫,是否有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 
+0

請提供完整的config.m4文件 – johannes 2010-06-05 19:22:02

+0

我是新來的StackOverflow。我們已經放棄了爲該項目添加libtidy,並且我不知道是否應該刪除這個問題(人們對此有興趣)。我該怎麼辦? – eli 2010-06-09 18:42:48

+0

@ewokker離開它。有人可能會回答。 – Artefacto 2010-06-12 15:39:15

回答

1

你編譯相同的PHP版本爲PHP香草您的擴展?你應該使用相同版本的PHP源代碼。 此外,請確保在php.ini文件中,您在擴展之前加載了'libtidy'擴展名。

+0

感謝您的答案。正如我在上面的評論中提到的,該項目已經開始。但是,下次進行故障排除時,這些看起來很不錯。 – eli 2010-07-18 08:30:40