Apache配置壓縮優化時報錯——undefined symbol: inflateEnd

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1345264

   圣誕都過了,好久沒來51發博文了。最近一直在忙考試和其他一些私人事務,感覺長期不發博文,有點不好。不是不發,實在是最近總結的東西,沒法發,都是一些考試相關的東西。蛋疼!正好幫助朋友搭網站環境了,就想起來之前有一篇總結錯誤的文章當時想發,后來給忘掉了,今天就拿出來發上吧。哈哈!


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將會設置這個選項,鏈接時會有這個參數,編譯出來的可執行程序的庫文件搜索路徑就得到擴展了。

轉自:http://nolinux.blog.51cto.com/4824967/1345264

原創文章,作者:s19930811,如若轉載,請注明出處:http://www.www58058.com/2007

(0)
s19930811s19930811
上一篇 2016-08-15 12:12
下一篇 2016-08-15 12:12

相關推薦

  • Linux網絡屬性配置—iproute命令家族

    ip命令: show / manipulate routing, devices, policy routing and tunnels ip [ OPTIONS ] OBJECT { COMMAND | help } OBJECT := { link | addr | route | netns  } ip  OBJECT: ip li…

    Linux干貨 2016-12-04
  • 初學linux遇到的問題

    1 su uername 顯示的是基本格式,不是類似于[root@Centos7 ~]#,看著不知道進入到哪個目錄。解決辦法:在家目錄下使用ls -a命令顯示隱藏文件,使用nano .bash_profile命令,在那里編輯PS1=”[\u@\h \W]\\$”保存退出就好了。 疑問:為什么不在/etc/bashrc下更改呢?自答:改…

    Linux干貨 2017-07-15
  • issue設置和定時關機練習

    /etc/issue內的代碼意義 \l 顯示第幾個終端機接口(tty)\m 顯示硬件的等級 (x86_64)\n 顯示主機的網絡名稱 (zcl-domain)\r 操作系統的版本 (2.6.32-642.e16)\t 顯示本地端時間的時間(20:22:12) \d顯示本地端的日期 (2016-8-5)\s 操作系統的名稱(linux)  練習 1,…

    Linux干貨 2016-08-05
  • 面授20-1班 0805課間練習與課后作業

    課間練習 第一階段 新學的命令文本命令cat tac rev more less head tail cut paste wc sort dif patch 1 、找出ifconfig 命令結果中本機的所有IPv4 地址 [root@IP70-CentOS7 ~]# >>ifconfig | tr&nbsp…

    Linux干貨 2016-08-07
  • Linux發展史

    摘要:Linux無處不在的存在于我們的周圍,家庭、公司、學校等等?,F在的Linux已經從最初示很少的一段代碼,發展成全世界應用范圍最廣的操作系統。本文將為大家展現Linux的發展史。 一、Linux的是什么       Linux是一套可以免費使用和自由傳播的類Unix操作系統操作系統,是一個基于POSIX和UNIX的多用戶、多…

    Linux干貨 2016-10-18
欧美性久久久久