加载Apache2时的未定义符号mod_xml2enc

时间:2015-05-22 01:33:05

标签: apache centos5 undefined-symbol mod-proxy-html

我很沮丧地在CentOS 5机箱上安装与Apache2 HTTP服务器相关的反向代理相关模块。由于它是旧版本的Apache2服务器,我不得不使用Apache工具' apxs'从源代码编译模块。我没有收到任何警告或错误安装模块的问题' apxs'但在尝试重新启动Apache服务器时出现运行时错误。

Starting httpd: httpd: Syntax error on line 206 of /etc/httpd/conf/httpd.conf: Cannot load /usr/lib64/httpd/modules/mod_xml2enc.so into server: /usr/lib64/httpd/modules/mod_xml2enc.so: undefined symbol: xmlDetectCharEncoding
                                                           [FAILED]

以下是更多细节。

OS:  CentOS 5.11; Linux 2.6.18-400.1.1.el5 #1 SMP Thu Dec 18 00:59:53 EST 2014 x86_64 x86_64 x86_64 GNU/Linux
Apache: version 2.2.3

由于历史原因,我无法将其中任何一个升级到较新版本以解决此问题。

操作系统最初缺少libxml2,我成功安装了yum,没有任何问题。我下载了mod_proxy_html的源文件,包括1)mod_xml2enc.c,2)mod_proxy_html.h和3)mod_proxy_html.c

我首先使用以下命令安装mod_xml2enc然后再安装mod_proxy_html。

apxs -i -a -c -I /usr/include/libxml2/ mod_xml2enc.c
apxs -i -a -c -I /usr/include/libxml2/ -I ./ mod_proxy_html.c

两者似乎都很好,并显示了如下输出:

/usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -fno-strict-aliasing  -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd  -I/usr/include/apr-1   -I/usr/include/apr-1  -I/usr/include/libxml2/  -c -o mod_xml2enc.lo mod_xml2enc.c && touch mod_xml2enc.slo
/usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_xml2enc.la  -rpath /usr/lib64/httpd/modules -module -avoid-version    mod_xml2enc.lo
/usr/lib64/httpd/build/instdso.sh SH_LIBTOOL='/usr/lib64/apr-1/build/libtool' mod_xml2enc.la /usr/lib64/httpd/modules
/usr/lib64/apr-1/build/libtool --mode=install cp mod_xml2enc.la /usr/lib64/httpd/modules/
cp .libs/mod_xml2enc.so /usr/lib64/httpd/modules/mod_xml2enc.so
cp .libs/mod_xml2enc.lai /usr/lib64/httpd/modules/mod_xml2enc.la
cp .libs/mod_xml2enc.a /usr/lib64/httpd/modules/mod_xml2enc.a
chmod 644 /usr/lib64/httpd/modules/mod_xml2enc.a
ranlib /usr/lib64/httpd/modules/mod_xml2enc.a
PATH="$PATH:/sbin" ldconfig -n /usr/lib64/httpd/modules
----------------------------------------------------------------------
Libraries have been installed in:
   /usr/lib64/httpd/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag
   - have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------
chmod 755 /usr/lib64/httpd/modules/mod_xml2enc.so
[activating module `xml2enc' in /etc/httpd/conf/httpd.conf]

但是,当我尝试重新启动服务器时,我提出了顶部的错误消息。

我已经尝试了很多方法来解决这个问题,然而,没有任何效果。也许值得注意的是,我采取了在CentOS 5.11 32位机器上安装相同模块的确切步骤,并且完全没有问题。这两台机器之间的唯一区别只有一个是32位,另一个是64位。

希望有人知道如何解决这个问题。

提前多多感谢。

1 个答案:

答案 0 :(得分:2)

我自己找到了这个问题的解决方案。这是一个愚蠢的。我忘了将libxml2加载到Apache服务器。添加LoadFile /usr/lib64/libxml2.so后,错误消失了。