Apache静态编译与动态编译的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Apache静态编译与动态编译的区别相关的知识,希望对你有一定的参考价值。

Apache拥有4层结构,从核心到外层的module。而外层的module可以用通过静态和动态两种方式与Apache共同工作。这也就引入下文的“动态”和“静态”两种编译安装方式。

静态编译:

编译的时候,所有的模块自己编译进  httpd  这个文件中,启动Apache的时候这些模块就已经加载进来了,只要在  <ifmodule></ifmodule>中来配置就可以了。

动态编译:

编译的时候,使用--enable-mods-shared=MODULE-LIST来动态编译。编译完成后在modules/下有.so文件,对应在httpd.conf文件的LoadModule位置,如果要使用某模块,则启用此LoadModule,然后再<ifmodule></ifmodule>配置,这个模块才有效。

官方说静态的比动态的在性能方面多5%左右。相对来说,静态的效率高些,而动态方式配置方面灵活。

httpd2.4.4为例,./configure --help里显示了如下3种方式:

--enable-modules=MODULE-LIST

--enable-mods-shared=MODULE-LIST

--enable-mods-static=MODULE-LIST

后面可以跟"all", "most","few", "reallyall". 3种方式是对所有或大多数的模块进程编译,单个模块的编译以其他方式呈现。经过测试,--enable-modules--enable-mods-shared效果一致,都是动态编译,而--enable-mods-static是静态编译。如果要明确指定对某模块的编译方式,模块名后面要跟staticshared指出。模块名以./configure--help的输出为准。如大多数模块要使用动态编译,而cgi模块要静态编译,则

./configure --enable-mods-shared=all--enable-cgi=static --with-apr=/usr/local/apr--with-apr-util=/usr/local/apr-util

如果指定了大多数模块的编译方式,且指定了单个模块,但没有指定单个模块的编译方式,则单个模块的编译方式和大多数模块的编译方式相同。

也可以禁用某模块进行编译,以--disable开头。

httpd -D DUMP_MODULES: 查看已经加载的所有静态和动态模块。

apachectl-l: 查看已经加载的所有静态模块。


以上是关于Apache静态编译与动态编译的区别的主要内容,如果未能解决你的问题,请参考以下文章

apache动态编译与静态编译

编译型语言解释型语言静态类型语言动态类型语言概念与区别

编译型语言解释型语言静态类型语言动态类型语言概念与区别

linux 静态库和动态库编译的区别

编译型语言解释型语言静态类型语言动态类型语言概念 与 区别

编译型语言解释型语言静态类型语言动态类型语言概念与区别