apache動態編譯/靜態編譯區別
http://space.itpub.net/16555225/viewspace-495942
以前編譯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)編譯了
> ldd httpd
libz.so.1 => /lib64/libz.so.1 (0x00002b6414c22000)
libaprutil-0.so.0 => /usr/local/apache2/lib/libaprutil-0.so.0 (0x00002b6414d36000)
libexpat.so.1 => /usr/lib64/libexpat.so.1 (0x00002b6414e4d000)
libapr-0.so.0 => /usr/local/apache2/lib/libapr-0.so.0 (0x00002b6414f71000)
librt.so.1 => /lib64/librt.so.1 (0x00002b6415097000)
libm.so.6 => /lib64/libm.so.6 (0x00002b64151a0000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002b64152f6000)
libnsl.so.1 => /lib64/libnsl.so.1 (0x00002b641542f000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b6415545000)
libdl.so.2 => /lib64/libdl.so.2 (0x00002b641565d000)
libc.so.6 => /lib64/libc.so.6 (0x00002b6415761000)
/lib64/ld-linux-x86-64.so.2 (0x00002b6414b06000)
能否在編譯時指定所用到的庫進行靜態編譯?
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/94384/viewspace-600258/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HTML也可以靜態編譯?HTML編譯
- JIT-動態編譯與AOT-靜態編譯:java/ java/ JavaScript/Dart亂談編譯JavaScriptDart
- 有關Linux的可執行程式——動態編譯、靜態編譯、readelfLinux行程編譯
- java動態編譯Java編譯
- Linux下快速靜態編譯Qt以及Qt動態/靜態版本共存Linux編譯QT
- 編譯lua動態庫編譯
- 動態編譯JAVA程式編譯Java
- go編譯靜態檔案到exeGo編譯
- Android NDK祕籍--編譯靜態庫、呼叫靜態庫Android編譯
- 從fdk_aac編碼器到自動靜態編譯FFmpeg編譯
- linux下靜態庫、動態庫編譯及makefile書寫Linux編譯
- linux成長之路(gcc編譯器、靜態庫、動態庫)LinuxGC編譯
- C++編譯器認為的指標型別(靜態聯編)C++編譯指標型別
- Java動態編譯優化——提升編譯速度(N倍)Java編譯優化
- 靜態編譯Qt5.4.1和Qt WebKit編譯QTWebKit
- VS2010靜態編譯編譯
- 編譯libpcap模擬器靜態庫編譯PCA
- Android:JNI與NDK(二)交叉編譯與動態庫,靜態庫Android編譯
- Groovy 2.0靜態型別檢查及編譯功能介紹型別編譯
- Dubbo原始碼之動態編譯原始碼編譯
- Java動態編譯和熱更新Java編譯
- nginxphp動態編譯載入模組.NginxPHP編譯
- Arm64架構下靜態編譯Nginx架構編譯Nginx
- IDA Pro for Mac 靜態反編譯軟體Mac編譯
- IDA Pro for Mac(靜態反編譯軟體)Mac編譯
- 偽靜態、靜態和動態的區別
- 深入理解Java的動態編譯Java編譯
- 編譯靜態庫的方式使用spdlog和fmt編譯
- vue3編譯最佳化之“靜態提升”Vue編譯
- 關於MNN工程框架編譯出來的靜態庫和動態庫的使用框架編譯
- Python 語言特性:編譯+解釋、動態型別語言、動態語言Python編譯型別
- .NET Core單檔案釋出靜態編譯AOT CoreRT編譯
- Qt for Windows:Qt 5.8.0 MinGW 靜態編譯版本(包含OpenSSL)QTWindows編譯
- Linux下把靜態庫編譯進PHP的方法Linux編譯PHP
- 為了簡寫這行程式碼,我竟使用靜態和動態編譯技術行程編譯
- apache編譯安裝Apache編譯
- [譯] 用 Workers 讓靜態網站動態化網站
- C/C++ 編譯器和偵錯程式以及靜態庫、動態庫使用匯總(轉)C++編譯