auto/configure 文件中有一行. auto/modules, 这个文件中定义了要注册到 nginx 中各个模块的信息以及对应的源文件,然后遍历文件中包含所有定义模块名称的变量 modules,自动生成 ngx_module_t *ngx_modules[] 和 char *ngx_module_names[] 两个数组,并写入到 $NGX_MODULES_C 文件中。这就解释了第二个问题中两个数组是从哪里定义的问题了。
- ############## nginx/auto/modules ################
- ......
- modules="$modules $MISC_MODULES"
- cat << END > $NGX_MODULES_C
- #include <ngx_config.h>
- #include <ngx_core.h>
- $NGX_PRAGMA
- END
- #声明模块为全局变量
- for mod in $modules
- do
- echo "extern ngx_module_t $mod;" >> $NGX_MODULES_C
- done
- #定义并初始化ngx_module_t *ngx_modules[] 数组,然后输出重定向到$NGX_MODULES_C
- echo >> $NGX_MODULES_C
- echo 'ngx_module_t *ngx_modules[] = {' >> $NGX_MODULES_C
- for mod in $modules
- do
- echo " &$mod," >> $NGX_MODULES_C
- done
- cat << END >> $NGX_MODULES_C
- NULL
- };
- END
- #定义并初始化char *ngx_module_names[]数组,然后输出重定向到$NGX_MODULES_C
- echo 'char *ngx_module_names[] = {' >> $NGX_MODULES_C
- for mod in $modules
- do
- echo " \"$mod\"," >> $NGX_MODULES_C
- done
- cat << END >> $NGX_MODULES_C
- NULL
- };
- END
- .......
nginx/auto/modules 这个文件生成的两个数组用于 cycle 的初始化,因此如果开发者开发的模块要添加到 nginx 中,一定要记得修改 nginx/auto/modules 这个文件,否则是不会被编译到 nginx 中的(当然不会生效啦)。
来源: http://www.cnblogs.com/sxhlinux/p/6806765.html