apache动态编译和静态编译问题

转自:http://blog.163.com/lgh_2002/blog/static/44017526201002455551991/


编译和安装apache分为动态、静态两种方式。

动态编译是指在以后的使用中随时调整配置文件就可以加载模块;静态则相反,在编译时就决定了相应的模块。


举例: 以mod_rewrite模块为例:
错误方式:

./configure
--prefix=/usr/local/apache2
--enable-so
--enable-mods-shared=most
--enable-rewrite
--enable-speling
--enable-forward
--enable-ssl
--with-ssl=/usr/local/openssl

会导致,ssl启动apache的时候报告:
apachectl startssl
Syntax error on line 246 of /usr/local/apache2/conf/httpd.conf:
Cannotload /usr/local/apache2/modules/mod_ssl.so into server:/usr/local/apache2/modules/mod_ssl.so: undefined symbol: X509_free

解释

问题出在–enable-so,–enable-so表示让apache核心装载DSO,但是不实际编译任何动态模块;
–enable-ModuleName表示,编译并包含模块ModuleName;
–enable-ModuleName=shared表示,将这个模块编译成动态的。

正确方式:

搞清除上面所述的内容,就ok了:
应该去掉–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编译安装的方式的区别。

静态编译,就是将module直接在安装的过程中放到apache中,当apache使用module的时候,就可以直接使用了。而动态编译安装,只是将module引入到apache之中,在使用的时候才会真正的去寻找,但是在动态中必须有正确的地址,否则就会出现上文提到的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值