原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://nolinux.blog.51cto.com/4824967/1345264
環境: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
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即可。
一、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參數就能鏈接了
二、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