ITPub博客

首页 > Linux操作系统 > Linux操作系统 > apache动态编译/静态编译区别

apache动态编译/静态编译区别

原创 Linux操作系统 作者:tengrid 时间:2009-05-18 18:34:59 0 删除 编辑

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)编译了

admin@usr/local/apache2/bin> 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/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-05-18

  • 博文量
    136
  • 访问量
    378037