<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # apxs - Apache 擴展工具 `apxs`是一個為Apache HTTP服務器編譯和安裝擴展模塊的工具,用于編譯一個或多個源程序或目標代碼文件為動態共享對象,使之可以用由`mod_so`提供的`LoadModule`指令在運行時加載到Apache服務器中。 因此,要使用這個擴展機制,你的平臺必須支持DSO特性,而且Apache `httpd`必須內建了`mod_so`模塊。`apxs`工具能自動探測是否具備這樣的條件,你也可以自己用這個命令手動探測: ``` $ httpd -l ``` 該命令的輸出列表中應該有`mod_so`模塊。如果所有這些條件均已具備,則可以很容易地借助`apxs`安裝你自己的DSO模塊以擴展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 [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 $ _ ``` 其中的參數files可以是任何C源程序文件(.c)、目標代碼文件(.o)、甚至是一個庫(.a)。`apxs`工具會根據其后綴自動編譯C源程序或者連接目標代碼和庫。但是,使用預編譯的目標代碼時,必須保證它們是地址獨立代碼(PIC),使之能被動態地加載。如果使用GCC編譯,則應該使用 `-fpic` 參數;如果使用其他C編譯器,則應該查閱其手冊,為`apxs`使用相應的編譯參數。 有關Apache對DSO的支持的詳細信息,可以閱讀`mod_so`文檔,或者直接閱讀`src/modules/standard/mod_so.c`源程序。 ## 語法 `**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 ...` ## 選項 ### 一般選項 `-n modname` 它明確設置了 `-i`(安裝)和 `-g`(模板生成)選項的模塊名稱。對 `-g` 選項,它是必須的;對 `-i` 選項,`apxs`工具會根據源代碼判斷,或(在失敗的情況下)按文件名推測出這個模塊的名稱。 ### 查詢選項 `-q` 查詢某種`apxs`設置的信息。該選項的query參數可以是下列一個或多個字符串:`CC`, `CFLAGS`, `CFLAGS_SHLIB`, `INCLUDEDIR`, `LD_SHLIB`, `LDFLAGS_SHLIB`, `LIBEXECDIR`, `LIBS_SHLIB`, `SBINDIR`, `SYSCONFDIR`, `TARGET` 。 這個參數用于手動查詢某些設置。比如,要手動處理Apache的C頭文件,可以在Makefile中使用: ``` INC=-I`apxs -q INCLUDEDIR` ``` ### 配置選項 `-S name=value` 此選項可以改變apxs的上述設置。 ### 模板生成選項 `-g` 此選項生成一個名為name的子目錄(見選項 `-n`)和其中的兩個文件:一個是名為`mod_name.c`的樣板模塊源程序,可以用來建立你自己的模塊,或是學習使用apxs機制的良好開端;另一個則是對應的`Makefile` ,用于編譯和安裝此模塊。 ### DSO編譯選項 `-c` 此選項表示需要執行編譯操作。它首先會編譯C源程序(.c)files為對應的目標代碼文件(.o),然后連接這些目標代碼和files中其余的目標代碼文件(.o和.a),以生成動態共享對象dsofile 。如果沒有指定 `-o` 選項,則此輸出文件名由files中的第一個文件名推測得到,也就是默認為`mod_name.so` 。 `-o dsofile` 明確指定所建立的動態共享對象的文件名,它不能從files文件列表中推測得到。如果沒有明確指定,則其文件名將為`mod_unknown.so` 。 `-D name=value` 此選項直接傳遞到給編譯命令,用于增加自定義的編譯變量。 `-I incdir` 此選項直接傳遞到給編譯命令,用于增加自定義的包含目錄。 `-L libdir` 此選項直接傳遞到給連接命令,用于增加自定義的庫文件目錄。 `-l libname` 此選項直接傳遞到給連接命令,用于增加自定義的庫文件。 `-Wc,compiler-flags` 此選項用于向編譯命令 `libtool --mode=compile` 中附加compiler-flags ,以增加編譯器特有的選項。 `-Wl,linker-flags` 此選項用于向連接命令 `libtool --mode=link` 中附加linker-flags ,以增加連接器特有的選項。 ### DSO的安裝和配置選項 `-i` 此選項表示需要執行安裝操作,以安裝一個或多個動態共享對象到服務器的modules目錄中。 `-a` 此選項自動增加一個`LoadModule`行到`httpd.conf`文件中,以激活此模塊,或者,如果此行已經存在,則啟用之。 `-A` 與 `-a` 選項類似,但是它增加的`LoadModule`命令有一個井號前綴(`#`),即此模塊已經準備就緒但尚未啟用。 `-e` 表示需要執行編輯操作,它可以與 `-a` 和 `-A` 選項配合使用,與 `-i` 操作類似,修改Apache的`httpd.conf`文件,但是并不安裝此模塊。 ## 舉例 假設有一個擴展Apache功能的模塊`mod_foo.c` ,使用下列命令,可以將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 [activating module 'foo' in /path/to/apache/conf/httpd.conf] $ _ ``` 如果配置文件中尚不存在,會增加下列的行: ``` LoadModule foo_module modules/mod_foo.so ``` 如果你希望默認禁用此模塊,可以使用 `-A` 選項,即: ``` $ apxs -i -A mod_foo.c ``` 要快速測試apxs機制,可以建立一個Apache模塊樣板及其對應的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 $ _ ``` 然后,立即可以編譯此樣板模塊為共享對象并加載到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 [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 $ _ ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看