Tôi đã viết một phần mở rộng trong C++ sử dụng libtidy, và nó chạy hoàn toàn dưới PHP khi tôi biên dịch PHP --with-tidy
.Mở rộng PHP bằng cách sử dụng các biên dịch libtidy, nhưng không tải
Tuy nhiên, sẽ tốt hơn nếu chạy tiện ích mở rộng trên một vani PHP. Khi tôi cố gắng sử dụng tiện ích mở rộng, tôi nhận được một số thông tin như:
PHP Warning: PHP Startup: Unable to load dynamic library 'extension.so': undefined symbol: tidyCleanAndRepair in Unknown on line 0
và tiện ích không được tải.
Rõ ràng, tiện ích mở rộng chính thức gọn gàng hoạt động tốt. Tôi có các gói phát triển libtidy có liên quan được cài đặt trên hệ thống, và nó biên dịch + liên kết mà không có vấn đề gì. Tôi đã cố gắng xem xét mã cho phần mở rộng gọn gàng, nhưng nó là một khối lượng lớn các macro - các bản sao chép ngẫu nhiên có cảm giác giống như mã hàng hóa.
Bên cạnh việc liên kết tới thư viện với , Có phần mở rộng PHP hoặc câu lệnh C sửa lỗi này không?
Cảm ơn trước !!
EDIT: đây là toàn bộ tập tin 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
Vui lòng cung cấp tệp config.m4 đầy đủ – johannes
Tôi mới ở đây tại StackOverflow. Chúng tôi đã từ bỏ việc thêm libtidy vào dự án, và tôi không biết tôi có nên xóa câu hỏi này hay không (mọi người đã yêu thích nó). Tôi nên làm gì? – eli
@ewokker Rời khỏi nó. Ai đó có thể trả lời. – Artefacto