日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

apache动态编译/静态编译区别

發布時間:2025/1/21 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 apache动态编译/静态编译区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
總結
百度 google了好多文檔!

關于靜態的缺點是:編譯進APACHE內核,如果要新加模塊,要重新編譯;

動態:DSO模式動態加載;如果編譯中包含任何DSO模塊,則mod_so會被自動包含進核心。
下面是官方的解釋:


模塊選項
有兩種使用模塊的方法:一是靜態連接進核心,二是作為DSO模塊動態加載;如果編譯中包含任何DSO模塊,則mod_so會被自動包含進核心。如果希望核心能夠裝載DSO,但不實際編譯任何DSO模塊,則需明確指定"--enable-so=static"。

現在在網上好多裝APACHE的時候都會用 --enbale-so ,其實我認為這個有時候不是很必要的!

讓apache 核心裝載DSO,但是不實際編譯任何動態模塊

要Module所有模塊:
--enable-mods-shared=all

要Module大部分模塊:
--enable-mods-shared=most

編譯以后DSO會自動裝載 LoadModule,編譯的模塊

靜態編譯:

--enable-modules=most
--enable-modules=all

我的建議是,動態加載所有模塊,然后在httpd.conf中配置!

官方文檔:
Quotation
一般語法
一般情況下你可以使用如下語法啟用或者禁用某個模塊:

--disable-MODULE
禁用MODULE模塊(僅用于基本模塊)
--enable-MODULE=shared
將MODULE編譯為DSO(可用于所有模塊)
--enable-MODULE=static
將MODULE靜態連接進核心(僅用于擴展和實驗模塊)
--enable-mods-shared=MODULE-LIST
將MODULE-LIST中的所有模塊都編譯成DSO(可用于所有模塊)
--enable-modules=MODULE-LIST
將MODULE-LIST靜態連接進核心(可用于所有模塊)

上述 MODULE-LIST 可以是:
(1)用引號界定并且用空格分隔的模塊名列表

--enable-mods-shared='headers rewrite dav'

(2)"most"(大多數模塊[遇見錯誤模塊時忽略該模塊而不中斷配置過程])
(3)"all"(所有模塊[遇見錯誤模塊時中斷配置過程并報錯])

--enable-mods-shared=most

注意
configure將忽略MODULE和MODULE-LIST中的拼寫錯誤,注意仔細拼寫。用于MODULE和MODULE-LIST中的名稱是"mod_NAME"中去掉"mod_"并將剩余部分中的下劃線"_"替換為連字符"-"以后的結果,比如"mod_log_config"模塊應當表示為"log-config"。


官方說明:http://www.phpchina.com/manual/apache/programs/configure.html

百度文檔,的方法!

Quotation
以前編譯apache的時候
都是google搜索到的直接拿來用

這次自己編譯mod_rewrite和ssl遇到了問題
又不知道問題出在哪里
一個是mod_rewrite模塊沒有起作用
一個是以ssl啟動apache的時候報告如下錯誤:
apachectl startssl
Syntax error on line 246 of /usr/local/apache2/conf/httpd.conf:
Cannot load /usr/local/apache2/modules/mod_ssl.so into server: /usr/local/apache2/modules/mod_ssl.so: undefined symbol: X509_free

后來經過查找
明白了問題出在哪里

當時我是這么編譯apache的

./configure
--prefix=/usr/local/apache2
--enable-so
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl


而問題就出在–enable-so
現在知道了–enable-so的意思是說
讓apache 核心裝載DSO,但是不實際編譯任何動態模塊
–enable-ModuleName的意思是說 編譯并包含模塊ModuleName
而 –enable-ModuleName=shared 的意思是說將這個模塊編譯成動態的.

明白了這幾個選項的意思,感覺就水落石出了
根據上面的總結
我應該去掉–enable-so這行
如何希望動態編譯模塊
比如:–enable-rewrite應該替換為: –enable-rewrite=shared

最后,我將要編譯的應該為:

./configure
--prefix=/usr/local/apache2
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl


上面中 –enable-mods-shared=most的意思是說 動態的編譯進來大多數的模塊
而 –enable-mods-shared=all是指動態的編譯所有的模塊
如果把-shared去掉,就是靜態的編譯了…

綜上所述
總結出了我個人對apache的動態與靜態編譯的理解
好比有兩個人a和m
a代表apache,m代表module
要想讓a使用m的東西
一個方法是把m的東西都放到a那里去,a使用的時候就是現成的了
就是所謂的靜態編譯

還有一個方法,
就是告訴a, m的住址,當a要使用m的東西的時候,a去找m,然后使用
不過,這種方法要注意的一個問題就是:m必須要有實際的住址,
否則a會找不到m而產生錯誤的,我此文開始提到的 apachectl startssl產生
的錯誤就是這個原因,應該再編譯好ssl才可以的.
這種方法也就是apache 的動態(DSO)編譯了

我的configure文件:
Quotation
./configure --prefix=/opt/dfs/apache --enable-mods-shared=most --enable-ssl=shared --enable-rewrite=shared --enable-alias=shared --enable-include=shared --enable-headers=shared --enable-info=shared --with-threads=yes

其實

./configure --prefix=/opt/dfs/apache --enable-mods-shared=most --with-threads=yes
就可以了!
?


?

轉載于:https://blog.51cto.com/scanty/485267

總結

以上是生活随笔為你收集整理的apache动态编译/静态编译区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。