<p> 今天在64位的unix服务器上面安装apache服务器,执行./configure --prefix=.....成功,但在make时报</p>
<p class="t_msgfont">/usr/lib/libexpat.so: could not read symbols: File in wrong format,网上查询了很多解决办法,但在服务器上试验都不行!</p>
<p class="t_msgfont"> apache在编译的时候连接的库文件是默认的32位的库文件,而unix服务器是64位的,因此需要在编译的时候指定64位库文件的位置。明白了这个错误产生的原因,那么更改起来就容易了。apache在执行./configure后,相关的配置参数保存在MakeFile文件,该文件存放在/httpd-2.0.63/srclib/apr-util下面。文件中包含了编译时相关库文件的位置,打开该文件可以看到</p>
<p class="t_msgfont"> </p>
<pre name="code" class="unix">#cd srclib/apr-util
#vi MakeFile
APRUTIL_MAJOR_VERSION=0
APRUTIL_DOTTED_VERSION=0.9.15
srcdir = .
INCLUDES = -I/home/XXXX/software/httpd-2.0.63/srclib/apr-util/include -I/home/XXXX/software/httpd-2.0.63/srclib/apr-util/include/private -I/home/XXXX/software/httpd-2.0.63/srclib/apr/include
APRUTIL_LDFLAGS =
<span style="background-color: #ff00ff;">APRUTIL_LIBS = /usr/lib/libexpat.la /home/XXXX/software/httpd-2.0.63/srclib/apr/libapr-0.la -lrt -lm -lcrypt -lnsl -lpthread -ldl</span>
TARGET_LIB = libaprutil-${APRUTIL_MAJOR_VERSION}.la
INSTALL_SUBDIRS =
TARGETS = delete-lib $(TARGET_LIB) delete-exports aprutil.exp export_vars.h</pre>
<p class="t_msgfont"> 可以看到APRUTIL_LIBS 这个参数,同时到/usr下面,可以看到同时有lib及lib64两个文件夹,将lib64文件夹中的libexpat.la文件加入到APRUTIL_LIBS 中即可,修改后的Mikefile文件如下</p>
<p class="t_msgfont"> </p>
<p class="t_msgfont"> </p>
<pre name="code" class="java">srcdir = .
INCLUDES = -I/home/XXXX/software/httpd-2.0.63/srclib/apr-util/include -I/home/XXXX/software/httpd-2.0.63/srclib/apr-util/include/private -I/home/XXXX/software/httpd-2.0.63/srclib/apr/include
APRUTIL_LDFLAGS =
<span style="background-color: #ff00ff;">APRUTIL_LIBS = /usr/lib64/libexpat.la /usr/lib/libexpat.la /home/XXXX/software/httpd-2.0.63/srclib/apr/libapr-0.la -lrt -lm -lcrypt -lnsl -lpthread -ldl</span>
TARGET_LIB = libaprutil-${APRUTIL_MAJOR_VERSION}.la
INSTALL_SUBDIRS =</pre>
<p class="t_msgfont"> </p>
<p> 然后执行 make及make install即可完成安装!</p>
<p class="t_msgfont">/usr/lib/libexpat.so: could not read symbols: File in wrong format,网上查询了很多解决办法,但在服务器上试验都不行!</p>
<p class="t_msgfont"> apache在编译的时候连接的库文件是默认的32位的库文件,而unix服务器是64位的,因此需要在编译的时候指定64位库文件的位置。明白了这个错误产生的原因,那么更改起来就容易了。apache在执行./configure后,相关的配置参数保存在MakeFile文件,该文件存放在/httpd-2.0.63/srclib/apr-util下面。文件中包含了编译时相关库文件的位置,打开该文件可以看到</p>
<p class="t_msgfont"> </p>
<pre name="code" class="unix">#cd srclib/apr-util
#vi MakeFile
APRUTIL_MAJOR_VERSION=0
APRUTIL_DOTTED_VERSION=0.9.15
srcdir = .
INCLUDES = -I/home/XXXX/software/httpd-2.0.63/srclib/apr-util/include -I/home/XXXX/software/httpd-2.0.63/srclib/apr-util/include/private -I/home/XXXX/software/httpd-2.0.63/srclib/apr/include
APRUTIL_LDFLAGS =
<span style="background-color: #ff00ff;">APRUTIL_LIBS = /usr/lib/libexpat.la /home/XXXX/software/httpd-2.0.63/srclib/apr/libapr-0.la -lrt -lm -lcrypt -lnsl -lpthread -ldl</span>
TARGET_LIB = libaprutil-${APRUTIL_MAJOR_VERSION}.la
INSTALL_SUBDIRS =
TARGETS = delete-lib $(TARGET_LIB) delete-exports aprutil.exp export_vars.h</pre>
<p class="t_msgfont"> 可以看到APRUTIL_LIBS 这个参数,同时到/usr下面,可以看到同时有lib及lib64两个文件夹,将lib64文件夹中的libexpat.la文件加入到APRUTIL_LIBS 中即可,修改后的Mikefile文件如下</p>
<p class="t_msgfont"> </p>
<p class="t_msgfont"> </p>
<pre name="code" class="java">srcdir = .
INCLUDES = -I/home/XXXX/software/httpd-2.0.63/srclib/apr-util/include -I/home/XXXX/software/httpd-2.0.63/srclib/apr-util/include/private -I/home/XXXX/software/httpd-2.0.63/srclib/apr/include
APRUTIL_LDFLAGS =
<span style="background-color: #ff00ff;">APRUTIL_LIBS = /usr/lib64/libexpat.la /usr/lib/libexpat.la /home/XXXX/software/httpd-2.0.63/srclib/apr/libapr-0.la -lrt -lm -lcrypt -lnsl -lpthread -ldl</span>
TARGET_LIB = libaprutil-${APRUTIL_MAJOR_VERSION}.la
INSTALL_SUBDIRS =</pre>
<p class="t_msgfont"> </p>
<p> 然后执行 make及make install即可完成安装!</p>