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
下一篇 2016-08-15

相關推薦

  • 20 shell腳本編程1

    20 shell腳本編程1 一、雜項知識整理 1、腳本文件格式:     #!/bin/bash     (注釋信息:)     #description:say hello     #vesion:…

    Linux干貨 2016-08-11
  • 作業權限管理

    一、在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾。 首先創建三個組g1,g2,g3,題目要求在/data/testdir目錄里創建的文件自動屬于g1組那么首先要將這個目錄的屬組改為g1,然后通過更改…

    Linux干貨 2016-08-03
  • 文件權限管理

    文件權限               [root@CentOS6 ~]# ll 3.txt            &nb…

    Linux干貨 2016-08-04
  • 士大夫

    士大夫

    2017-11-13
  • linux文件權限

    一、前言 在linux中,每個目錄或者文件都有相對應的權限,linux通過文件屬主(user),文件屬組(group),其它人(order)對一個文件或者目錄控制讀寫執行權限,當然在這些基本權限之外還有特殊權限,facl(file access control list)等。 二、文件基本權限    2.1:屬主、屬組、order概念 &…

    Linux干貨 2015-08-17
  • 第二周博客作業

    1.Linux上的文件管理類命令都有那些,其常用的使用方法及其相關示例演示。
    2.Bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。
    3.請使用命令行展開功能來完成以下的練習。
    4.文件的元數據信息有哪些,分別表示什么含義,如何查看?如何修改文件的時間戳信息。
    5.如何定義一個命令的別名,如何在命令中引用另一個命令的執行結果?
    6.顯示/var目錄下所有以1開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其他字符)的文件或目錄。
    7.顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
    8.顯示/etc目錄下,以非字母開頭,后面跟了一個字母以及其他任意長度任意字符的文件或目錄。
    9.在/tmp目錄下創建以tgile開頭,后跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22
    10.復制/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
    11.復制/etc目錄下所有以.d結尾的文件或目錄到/tmp/mytest2目錄中。
    12.復制/etc目錄下所有以l或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。

    2018-03-22
欧美性久久久久