लोड नहीं करता है मैंने सी ++ में एक एक्सटेंशन लिखा है जो libtidy का उपयोग करता है, और जब मैं PHP --with-tidy
संकलित करता हूं तो यह PHP के नीचे पूरी तरह से चलता है।libtidy compiles का उपयोग करके PHP एक्सटेंशन, लेकिन
हालांकि, यह विस्तार अच्छा होगा कि विस्तार एक वेनिला PHP पर चलाना अच्छा लगे। जब मैं एक्सटेंशन का उपयोग करने का प्रयास करता हूं, तो मुझे कुछ मिलता है:
PHP Warning: PHP Startup: Unable to load dynamic library 'extension.so': undefined symbol: tidyCleanAndRepair in Unknown on line 0
और एक्सटेंशन लोड नहीं होता है।
जाहिर है, आधिकारिक साफ विस्तार ठीक काम करता है। मेरे पास सिस्टम पर प्रासंगिक libtidy विकास संकुल स्थापित हैं, और यह बिना किसी समस्या के + लिंक संकलित करता है। मैंने साफ विस्तार के लिए कोड को देखने की कोशिश की है, लेकिन यह मैक्रोज़ का एक विशाल द्रव्यमान है - यादृच्छिक रूप से कार्गो कोड की तरह लगने वाले टुकड़े कॉपी करना।
के साथ लाइब्रेरी से जोड़ने के अलावा, क्या कोई PHP एक्सटेंशन या सी कथन है जो इस त्रुटि को हल करता है?
अग्रिम धन्यवाद !!
संपादित करें:
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
कृपया पूरी config.m4 फ़ाइल – johannes
प्रदान करें मैं यहां StackOverflow पर नया हूं। हमने परियोजना में libtidy जोड़ने पहले से ही छोड़ दिया है, और मुझे नहीं पता कि मुझे इस सवाल को हटा देना चाहिए या नहीं (लोगों ने इसका पक्ष लिया है)। मुझे क्या करना चाहिए? – eli
@ewokker इसे छोड़ दें। कोई जवाब दे सकता है। – Artefacto