<-
Apache > HTTP 伺服器 > 文件 > 版本 2.4 > 程式

apxs - APache eXtenSion 工具

可用語言:  en  |  fr  |  ko  |  tr 

apxs 是用來建置並安裝 Apache 超文字傳輸協定 (HTTP) 伺服器的擴充功能模組的工具。這會透過建置一個動態共用物件 (DSO) 來達成,它使用一個或多個原始碼或物件 檔案,這些檔案可以透過 LoadModule 指令,從 mod_so 在執行階段載入 Apache 伺服器。

因此,要使用這個擴充功能機制,您的平台必須支援 DSO 功能,而且您的 Apache httpd 二進位元組必須使用 mod_so 模組建置。如果不在這種情況下,apxs 工具會自動抱怨。您可以自行手動執行指令來檢查

$ httpd -l

模組 mod_so 應該是顯示列表中的一部分。如果具備這些需求,使用 DSO 機制配合這個 apxs 工具,您可以輕易透過安裝您自己的模組,來擴充 Apache 伺服器的功能

$ 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
[在 /path/to/apache/etc/httpd.conf 中啟用 `foo` 模組]
$ apachectl restart
/path/to/apache/sbin/apachectl restart:httpd 未執行,嘗試啟動
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303):已載入模組 foo_module
/path/to/apache/sbin/apachectl restart:httpd 已啟動
$ _

檔案 引數可以是任何 C 原始碼檔案 (.c),一個物件檔案 (.o) 或甚至是函式庫檔案 (.a)。apxs 工具會自動辨識這些擴充功能,並自動使用 C 原始碼檔案進行編譯,同時僅使用物件和檔案檔案進行連結階段。但是,使用這些預先編譯的物件時,請確保其是針對位置獨立碼 (PIC) 編譯的,才能將其用於動態載入的共用物件。例如,使用 GCC 時您永遠只需要使用 -fpic。對於其他 C 編譯器,請參閱其手冊頁面或查看 apxs 用於編譯物件檔案的旗標。

有關 Apache 中 DSO 支援的詳細資訊,請閱讀 mod_so 文件,甚至可以閱讀 src/modules/standard/mod_so.c 原始碼檔案。

Support Apache!

另請參閱

top

概要

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

apxs -q [ -v ] [ -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

選項

一般選項

-n modname
這會明確設定 -i(安裝)和 -g(範本產生)選項的模組名稱。使用此項明確指定模組名稱。選項 -g 要求這樣做,而選項 -i 則由 apxs 工具從原始碼中判斷名稱,或(作為後備)至少從檔名猜測。

查詢選項

-q
會執行變數和環境設定的查詢,用於建置 httpd。當呼叫時沒有 query 參數,他會列印所有已知的變數及其值。選擇性的 -v 參數會對清單輸出進行格式化。

使用此項手動判斷設定,用於建置將會載入您的模組的 httpd。例如,在您自己的 Makefiles 中使用

INC=-I`apxs -q INCLUDEDIR`

如果您需要手動存取 Apache 的 C 標頭檔。

組態選項

-S name=value
此選項會變更上述 apxs 設定。

範本產生選項

-g
這會產生一個子目錄 name(請參閱選項 -n),並在其中產生兩個檔:一個名為 mod_name.c 的範例模組原始碼檔,可用於作為建立您自己的模組的範本,或作為使用 apxs 機制的快速入門。以及對應的 Makefile,用於更輕鬆地建置和安裝此模組。

DSO 編譯選項

-c
此處顯示編譯運作。它首先將 檔案 的 C 原始檔 (.c) 編譯成相應的物件檔 (.o),然後透過連結這些物件檔加上 檔案 的其他物件檔 (.o 和 .a) 來在 dso 檔案 中建構動態共用物件。如果未指定 -o 選項,則會從 檔案 中的第一個檔名猜測輸出檔案,因此通常預設為 mod_名稱.so
-o dso 檔案
明確指定已建立動態共用物件的檔名。如果未指定,且無法從 檔案 清單猜測名稱,則會使用備用名稱 mod_unknown.so
-D 名稱=
此選項會直接傳遞至編譯指令。使用此選項可將您自己的定義新增至建構歷程。
-I incdir
此選項會直接傳遞至編譯指令。使用此選項可新增您自己的包含目錄至建構歷程中搜尋。
-L libdir
此選項會直接傳遞至連結器指令。使用此選項可新增您自己的函式庫目錄至建構歷程中搜尋。
-l libname
此選項會直接傳遞至連結器指令。使用此選項可新增您自己的函式庫至建構歷程中搜尋。
-Wc,編譯器旗標
此選項將 編譯器旗標 傳遞為其他旗標給 libtool --mode=compile 指令。使用此選項可新增本機的編譯器特定選項。
-Wl,連結器旗標
此選項將 連結器旗標 傳遞為其他旗標給 libtool --mode=link 指令。使用此選項可新增本機的連結器特定選項。
-p
此選項會導致 apxs 連結至 apr/apr-util 函式庫。這對於編譯使用 apr/apr-util 函式庫的輔助程式非常有用。

DSO 安裝和設定選項

-i
此處顯示安裝運作,並將一個或多個動態共用物件安裝至伺服器的 modules 目錄。
-a
透過自動在 Apache 的 httpd.conf 設定檔中新增相應的 LoadModule 行來啟用模組,或在該行已存在時啟用該行。
-A
與選項 -a 相同,但建立的 LoadModule 指令會加上一個雜湊符號 (#),也就是說模組已準備好在稍後啟用,但最初仍處於停用狀態。
-e
此處顯示編輯運作,此運作可與 -a-A 選項一起使用,類似於 -i 運作,用於編輯 Apache 的 httpd.conf 設定檔而不試圖安裝模組。
top

範例

假設您有可用名為 mod_foo.c 的 Apache 模組,可用於擴充 Apache 伺服器的功能。要執行此操作,您必須先編譯 C 來源到共享物件,適合透過下列指令在執行期間載入到 Apache 伺服器

$ 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 組態,確保存在一個 LoadModule 指令來載入此共享物件。為簡化此步驟,apxs 提供一個自動方式來安裝共享物件到其「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
[在 /path/to/apache/conf/httpd.conf 中啟用模組 `foo`]
$ _

這樣一個名為

LoadModule foo_module modules/mod_foo.so

的行會新增到組態檔案(如果仍不存在)。如果您想預設停用它,請使用 -A 選項,

$ apxs -i -A mod_foo.c

要快速測試 apxs 機制,您可以透過下列方式建立一個範例 Apache 模組範本和對應的 Makefile

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

接著,您可以立即編譯此範例模組到共享物件,並將它載入到 Apache 伺服器

$ 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
[在 /path/to/apache/conf/httpd.conf 中啟用模組 `foo`]
apachectl restart
/path/to/apache/sbin/apachectl restart:httpd 未執行,嘗試啟動
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303):已載入模組 foo_module
/path/to/apache/sbin/apachectl restart:httpd 已啟動
$ _

可用語言:  en  |  fr  |  ko  |  tr 

top

意見

注意
此處並非問與答區段。置於此處的留言應指出關於改善文件或伺服器的建議,且若這些留言已執行或被視為無效/離題,則可能會遭我們的版主移除。關於如何管理 Apache HTTP Server 的問題應轉交到 Libera.chat 上我們的 IRC 頻道 #httpd,或寄送到 我們的郵件清單