Apache HTTP Server 版本2.2
說明 | 允許運(yùn)行時(shí)加載DSO模塊 |
---|---|
狀態(tài) | 擴(kuò)展(E) |
模塊名 | so_module |
源文件 | mod_so.c |
兼容性 | 在Windows上這是一個(gè)基本模塊(始終包含) |
該模塊在支持動(dòng)態(tài)鏈接機(jī)制的操作系統(tǒng)上可以用來在Apache啟動(dòng)和重啟時(shí)加載DSO模塊,而不用重新編譯。
在Unix上,被加載的可執(zhí)行代碼通常來自于共享對(duì)象文件(一般以.so
為擴(kuò)展名),在Windows上則為.so
或.dll
擴(kuò)展名。
用于Apache1.3的模塊不能直接用于Apache2.0 。
從Apache1.3.15開始,Windows上的模塊名規(guī)則發(fā)生了變化,現(xiàn)在使用mod_foo.so格式的名字。
Apache模塊的API對(duì)于Unix和Windows是一樣的。許多模塊在這兩個(gè)平臺(tái)間移植幾乎不需要什么修改,除非那些依賴于Unix特定屬性而Windows沒有提供的模塊。
如果一個(gè)模塊可用,那么有兩種方法使用它。在Unix上,可以被靜態(tài)編譯進(jìn)服務(wù)器。因?yàn)橛糜赪indows的Apache并沒有相應(yīng)于Unix下的Configure
編譯配置程序,模塊的源文件必須被加進(jìn)ApacheCore項(xiàng)目文件,并且它的符號(hào)(symbols)必須被添加到os\win32\modules.c
文件。
第二種方法是編譯為一個(gè)動(dòng)態(tài)鏈接庫(DLL),以便在運(yùn)行期間使用
指令加載。這些模塊DLL在Apache安裝期間就已經(jīng)安裝好了,不需要你自己去編譯。LoadModule
為了將模塊編譯為DLL,需要對(duì)模塊的源文件做一個(gè)小小的修改:模塊記錄(module record)必須從DLL導(dǎo)出(稍后將會(huì)創(chuàng)建,見下)。為了達(dá)到這個(gè)目的,請(qǐng)將AP_MODULE_DECLARE_DATA
(在Apache頭文件中定義的)添加到你的模塊記錄(module record)定義中。比如,如果你的模塊有:
module foo_module;
將上述內(nèi)容替換為:
module AP_MODULE_DECLARE_DATA foo_module;
注意,這僅在Windows上有效,因此該模塊可以不加修改的直接在Unix上使用。另外,如果你對(duì).DEF
文件很熟悉,你也可以使用它代替前面的方法導(dǎo)出該模塊。
要?jiǎng)?chuàng)建一個(gè)包含該模塊的DLL文件,你還必須將它連接到在編譯libhttpd.dll共享庫時(shí)創(chuàng)建的libhttpd.lib導(dǎo)出庫。你還可能需要修改編譯器設(shè)置以確保Apache頭文件被正確的加載了。這些庫位于服務(wù)器根目錄下的"modules"目錄中。最好是從中抓出一個(gè)已經(jīng)存在的模塊.dsp文件來看看以確保編譯環(huán)境配置無誤,或者按照.dsp文檢查編譯器和連接器的選項(xiàng)也可。
這樣將會(huì)為你的模塊創(chuàng)建一個(gè)DLL版本。只要將它放置到modules
目錄下,并使用LoadModule
指令加載即可。
說明 | 加載已命名的目標(biāo)文件或庫 |
---|---|
語法 | LoadFile filename [filename] ... |
作用域 | server config |
狀態(tài) | 擴(kuò)展(E) |
模塊 | mod_so |
該指令用于在服務(wù)器啟動(dòng)或者重啟時(shí)加載已命名目標(biāo)文件或庫,以用于加載需要被某些模塊使用的額外代碼。Filename可以是一個(gè)絕對(duì)路徑或者相對(duì)于ServerRoot
的相對(duì)路徑。
例如:
LoadFile libexec/libxmlparse.so
說明 | 加載目標(biāo)文件或庫,并將其添加到活動(dòng)模塊列表 |
---|---|
語法 | LoadModule module filename |
作用域 | server config |
狀態(tài) | 擴(kuò)展(E) |
模塊 | mod_so |
該指令加載目標(biāo)文件或庫filename并將模塊結(jié)構(gòu)名module添加到活動(dòng)模塊列表。module就是源代碼文件中用于拼寫module
的外部變量名,并作為模塊標(biāo)識(shí)符(Module Identifier)列在模塊文檔中。例如:
LoadModule status_module modules/mod_status.so
加載了位于ServerRoot
下模塊目錄中指定的模塊。