阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Apache配置压缩优化时报错——undefined symbol: inflateEnd

126次阅读
没有评论

共计 2810 个字符,预计需要花费 8 分钟才能阅读完成。

Apache 配置压缩优化时报错——undefined symbol: inflateEnd

环境:CentOS 6.4   
软件版本:httpd-2.4.6 apr-1.4.8 apr-util-1.5.2 pcre-8.33
其他的软件和库文件:
yum -y groupinstall “Development tools” “Server Platform Development”
yum -y install pcre-devel

问题描述:
在 apache 上做压缩优化的时候,当我 DSO 方式添加完 mod_deflate,并且配置好压缩参数之后,检查语法的是否出现如下报错:
httpd: Syntax error on line 102 of /application/apache2.4.6/conf/httpd.conf: Cannot load modules/mod_deflate.so into server: /application/apache2.4.6/modules/mod_deflate.so: undefined symbol: inflateEnd
未定义的符号:inflateEnd

问题处理办法:
1、首先检查了 httpd.conf 和 httpd-vhosts.conf 里面的配置,均无错误;然后又查看了编译 mod_deflate 时的输出信息,也没有提示错误。
2、我百度了 inflateEnd,第一个就是搜索条目就是 zlib 的百度百科,然后我就去 google 搜索 inflateEnd,搜索条目告诉我 inflateEnd 是属于 zlib.lib 库文件里面的。
3、接着我在 google 下面找到了以前也遇到过相似问题的人,他们是在 apr 的主配置文件 apr-1-config(老版本可能是 apr-conf)里面将 LDFLAGS=”” 修改为 LDFLAGS=”-lz”,然后用 apxs 从新编译 mod_deflate.c 后,apache 服务就正常了,并且也可以正常压缩文件了。
该问题的另一种解决办法:
需要在 LoadModule deflate_module  modules/mod_deflate.so 的前面加载 zlib.so
如果是 32 操作系统就在 LoadModule deflate_module    modules/mod_deflate.so 这行的上一行添加 LoadFile /usr/lib/libz.so 即可。
如果是 64 操作系统就在 LoadModule deflate_module    modules/mod_deflate.so 这行的上一行添加 LoadFile /usr/lib64/libz.so 即可。

下面是一些 LDFLAGS 和 lz 的相关信息:
一、gcc 一些应用
-shared 生成一个共享目标文件, 他可以和其他目标文件连接产生可执行文件. 只有部分系统支持该选项.
-Wl,option 把选项 option 传递给连接器. 如果 option 中含有逗号, 就在逗号处分割成多个选项.
-w 不生成任何警告信息。
-Wall 生成所有警告信息。
lc 是 link libc
lm 是 link libm
lz 是 link libz
- l 指定程序要链接的库文件,假设库文件名为 libxxx.so,链接命令为 -lxxx;
放在 /lib 和 /usr/lib 和 /usr/local/lib 里的库直接用 - l 参数就能链接了
- L 指定库文件所在目录

二、Makefile 选项讲解
CFLAGS 表示用于 C 编译器的选项。
CXXFLAGS 表示用于 C++ 编译器的选项。
这两个变量实际上涵盖了编译和汇编两个步骤。

CFLAGS:指定头文件(.h 文件)的路径,如:CFLAGS=-I/usr/include -I/path/include。同样地,安装一个包时会在安装路径下建立一个 include 目录,当安装过程中出现问题时,试着把以前安装的包的 include 目录加入到该变量中来。
LDFLAGS:gcc 等编译器会用到的一些优化参数,也可以在里面指定库文件的位置。用法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安装一个包都几乎一定的会在安装目录里建立一个 lib 目录。如果明明安装了某个包,而安装另一个包时,它愣是说找不到,可以抒那个包的 lib 路径加入的 LDFALGS 中试一下。
LIBS:告诉链接器要链接哪些库文件,如 LIBS = -lpthread -liconv
简单地说,LDFLAGS 是告诉链接器从哪里寻找库文件,而 LIBS 是告诉链接器要链接哪些库文件。不过使用时链接阶段这两个参数都会加上,所以你即使将这两个的值互换,也没有问题。
有时候 LDFLAGS 指定 - L 虽然能让链接器找到库进行链接,但是运行时链接器却找不到这个库,如果要让软件运行时库文件的路径也得到扩展,那么我们需要增加这两个库给 ”-Wl,R”:
LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib
如果在执行./configure 以前设置环境变量 export LDFLAGS=”-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib”,注意设置环境变量等号两边不可以有空格,而且要加上引号(shell 的用法)。那么执行 configure 以后,Makefile 将会设置这个选项,链接时会有这个参数,编译出来的可执行程序的库文件搜索路径就得到扩展了。

推荐阅读

Linux 中 Subversion 配置实例 http://www.linuxidc.com/Linux/2012-02/53109.htm

CentOS 6.2 SVN 搭建 (YUM 安装) http://www.linuxidc.com/Linux/2013-10/91903.htm

Apache+SVN 搭建 SVN 服务器 http://www.linuxidc.com/Linux/2013-03/81379.htm

Windows 下 SVN 服务器搭建和使用 + 客户端重新设置密码 http://www.linuxidc.com/Linux/2013-05/85189p5.htm

Ubuntu Server 12.04 安装 SVN 并迁移 Virtual SVN 数据 http://www.linuxidc.com/Linux/2013-05/84695.htm

Ubuntu Server 搭建 svn 服务以及迁移方法 http://www.linuxidc.com/Linux/2013-05/84693.htm

借助网盘搭建 SVN 服务器 http://www.linuxidc.com/Linux/2013-10/91271.htm

CentOS 6.3 下 Apache+SVN 部署 Web 版本同步 http://www.linuxidc.com/Linux/2013-07/86955.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计2810字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中