欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

<-
Apache > HTTP Server > 文檔 > 版本2.2 > 支持程序
   致謝 | 譯者聲明 | 本篇譯者:金步國 | 本篇譯稿最后更新:2006年1月13日 | 獲取最新版本

apxs - Apache 擴(kuò)展工具

apxs是一個(gè)為Apache HTTP服務(wù)器編譯和安裝擴(kuò)展模塊的工具,用于編譯一個(gè)或多個(gè)源程序或目標(biāo)代碼文件為動(dòng)態(tài)共享對(duì)象,使之可以用由mod_so提供的LoadModule指令在運(yùn)行時(shí)加載到Apache服務(wù)器中。

因此,要使用這個(gè)擴(kuò)展機(jī)制,你的平臺(tái)必須支持DSO特性,而且Apache httpd必須內(nèi)建了mod_so模塊。apxs工具能自動(dòng)探測是否具備這樣的條件,你也可以自己用這個(gè)命令手動(dòng)探測:

$ httpd -l

該命令的輸出列表中應(yīng)該有mod_so模塊。如果所有這些條件均已具備,則可以很容易地借助apxs安裝你自己的DSO模塊以擴(kuò)展Apache服務(wù)器的功能:

$ apxs -i -a -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
cp mod_foo.so /path/to/apache/modules/mod_foo.so
chmod 755 /path/to/apache/modules/mod_foo.so
[activating module 'foo' in /path/to/apache/etc/httpd.conf]
$ apachectl restart
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
/path/to/apache/sbin/apachectl restart: httpd started
$ _

其中的參數(shù)files可以是任何C源程序文件(.c)、目標(biāo)代碼文件(.o)、甚至是一個(gè)庫(.a)。apxs工具會(huì)根據(jù)其后綴自動(dòng)編譯C源程序或者連接目標(biāo)代碼和庫。但是,使用預(yù)編譯的目標(biāo)代碼時(shí),必須保證它們是地址獨(dú)立代碼(PIC),使之能被動(dòng)態(tài)地加載。如果使用GCC編譯,則應(yīng)該使用 -fpic 參數(shù);如果使用其他C編譯器,則應(yīng)該查閱其手冊,為apxs使用相應(yīng)的編譯參數(shù)。

有關(guān)Apache對(duì)DSO的支持的詳細(xì)信息,可以閱讀mod_so文檔,或者直接閱讀src/modules/standard/mod_so.c源程序。

top

語法

apxs -g [ -S name=value ] -n modname

apxs -q [ -S name=value ] query ...

apxs -c [ -S name=value ] [ -o dsofile ] [ -I incdir ] [ -D name=value ] [ -L libdir ] [ -l libname ] [ -Wc,compiler-flags ] [ -Wl,linker-flags ] files ...

apxs -i [ -S name=value ] [ -n modname ] [ -a ] [ -A ] dso-file ...

apxs -e [ -S name=value ] [ -n modname ] [ -a ] [ -A ] dso-file ...

top

選項(xiàng)

一般選項(xiàng)

-n modname
它明確設(shè)置了 -i(安裝)和 -g(模板生成)選項(xiàng)的模塊名稱。對(duì) -g 選項(xiàng),它是必須的;對(duì) -i 選項(xiàng),apxs工具會(huì)根據(jù)源代碼判斷,或(在失敗的情況下)按文件名推測出這個(gè)模塊的名稱。

查詢選項(xiàng)

-q
查詢某種apxs設(shè)置的信息。該選項(xiàng)的query參數(shù)可以是下列一個(gè)或多個(gè)字符串:CC, CFLAGS, CFLAGS_SHLIB, INCLUDEDIR, LD_SHLIB, LDFLAGS_SHLIB, LIBEXECDIR, LIBS_SHLIB, SBINDIR, SYSCONFDIR, TARGET

這個(gè)參數(shù)用于手動(dòng)查詢某些設(shè)置。比如,要手動(dòng)處理Apache的C頭文件,可以在Makefile中使用:

INC=-I`apxs -q INCLUDEDIR`

配置選項(xiàng)

-S name=value
此選項(xiàng)可以改變apxs的上述設(shè)置。

模板生成選項(xiàng)

-g
此選項(xiàng)生成一個(gè)名為name的子目錄(見選項(xiàng) -n)和其中的兩個(gè)文件:一個(gè)是名為mod_name.c的樣板模塊源程序,可以用來建立你自己的模塊,或是學(xué)習(xí)使用apxs機(jī)制的良好開端;另一個(gè)則是對(duì)應(yīng)的Makefile ,用于編譯和安裝此模塊。

DSO編譯選項(xiàng)

-c
此選項(xiàng)表示需要執(zhí)行編譯操作。它首先會(huì)編譯C源程序(.c)files為對(duì)應(yīng)的目標(biāo)代碼文件(.o),然后連接這些目標(biāo)代碼和files中其余的目標(biāo)代碼文件(.o和.a),以生成動(dòng)態(tài)共享對(duì)象dsofile 。如果沒有指定 -o 選項(xiàng),則此輸出文件名由files中的第一個(gè)文件名推測得到,也就是默認(rèn)為mod_name.so
-o dsofile
明確指定所建立的動(dòng)態(tài)共享對(duì)象的文件名,它不能從files文件列表中推測得到。如果沒有明確指定,則其文件名將為mod_unknown.so
-D name=value
此選項(xiàng)直接傳遞到給編譯命令,用于增加自定義的編譯變量。
-I incdir
此選項(xiàng)直接傳遞到給編譯命令,用于增加自定義的包含目錄。
-L libdir
此選項(xiàng)直接傳遞到給連接命令,用于增加自定義的庫文件目錄。
-l libname
此選項(xiàng)直接傳遞到給連接命令,用于增加自定義的庫文件。
-Wc,compiler-flags
此選項(xiàng)用于向編譯命令 libtool --mode=compile 中附加compiler-flags ,以增加編譯器特有的選項(xiàng)。
-Wl,linker-flags
此選項(xiàng)用于向連接命令 libtool --mode=link 中附加linker-flags ,以增加連接器特有的選項(xiàng)。

DSO的安裝和配置選項(xiàng)

-i
此選項(xiàng)表示需要執(zhí)行安裝操作,以安裝一個(gè)或多個(gè)動(dòng)態(tài)共享對(duì)象到服務(wù)器的modules目錄中。
-a
此選項(xiàng)自動(dòng)增加一個(gè)LoadModule行到httpd.conf文件中,以激活此模塊,或者,如果此行已經(jīng)存在,則啟用之。
-A
-a 選項(xiàng)類似,但是它增加的LoadModule命令有一個(gè)井號(hào)前綴(#),即此模塊已經(jīng)準(zhǔn)備就緒但尚未啟用。
-e
表示需要執(zhí)行編輯操作,它可以與 -a-A 選項(xiàng)配合使用,與 -i 操作類似,修改Apache的httpd.conf文件,但是并不安裝此模塊。
top

舉例

假設(shè)有一個(gè)擴(kuò)展Apache功能的模塊mod_foo.c ,使用下列命令,可以將C源程序編譯為共享模塊,以在運(yùn)行時(shí)加載到Apache服務(wù)器中:

$ apxs -c mod_foo.c
/path/to/libtool --mode=compile gcc ... -c mod_foo.c
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
$ _

然后,必須修改Apache的配置,以確保有一個(gè)LoadModule指令來加載此共享對(duì)象。為了簡化這一步驟,apxs可以自動(dòng)進(jìn)行該操作,以安裝此共享對(duì)象到"modules"目錄,并更新httpd.conf文件,命令如下:

$ apxs -i -a mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so
[activating module 'foo' in /path/to/apache/conf/httpd.conf]
$ _

如果配置文件中尚不存在,會(huì)增加下列的行:

LoadModule foo_module modules/mod_foo.so

如果你希望默認(rèn)禁用此模塊,可以使用 -A 選項(xiàng),即:

$ apxs -i -A mod_foo.c

要快速測試apxs機(jī)制,可以建立一個(gè)Apache模塊樣板及其對(duì)應(yīng)的Makefile :

$ apxs -g -n foo
Creating [DIR] foo
Creating [FILE] foo/Makefile
Creating [FILE] foo/modules.mk
Creating [FILE] foo/mod_foo.c
Creating [FILE] foo/.deps
$ _

然后,立即可以編譯此樣板模塊為共享對(duì)象并加載到Apache服務(wù)器中:

$ cd foo
$ make all reload
apxs -c mod_foo.c
/path/to/libtool --mode=compile gcc ... -c mod_foo.c
/path/to/libtool --mode=link gcc ... -o mod_foo.la mod_foo.slo
apxs -i -a -n "foo" mod_foo.la
/path/to/instdso.sh mod_foo.la /path/to/apache/modules
/path/to/libtool --mode=install cp mod_foo.la /path/to/apache/modules ... chmod 755 /path/to/apache/modules/mod_foo.so
[activating module 'foo' in /path/to/apache/conf/httpd.conf]
apachectl restart
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
/path/to/apache/sbin/apachectl restart: httpd started
$ _