Apache 模块创建教程包含有错误的代码。怎么修?
Apache module creation tutorial contains code with errors. How to fix?
我访问了以下 URL 以获取有关构建 apache 模块的说明:
https://httpd.apache.org/docs/2.4/developer/modguide.html
它在页面的中途指出自定义模块需要类似于以下的代码来处理 apache 配置文件中的条目:
static const command_rec example_directives[] =
{
AP_INIT_TAKE1("exampleEnabled", example_set_enabled, NULL, RSRC_CONF, "Enable or disable mod_example"),
AP_INIT_TAKE1("examplePath", example_set_path, NULL, RSRC_CONF, "The path to whatever"),
AP_INIT_TAKE2("exampleAction", example_set_action, NULL, RSRC_CONF, "Special action value!"),
{ NULL }
};
它在没有 gcc 选项的 apxs 下编译得很好。它不会在启用扩展错误检查的情况下进行编译。例如,我发出了这个命令:
apxs -i -a -Wc,Werror -Wc,-Wall -Wc,-Wextra -Wc,-O2 -c ./sample.c --enable-debug=YES
尝试执行 gcc -Wall -Wextra -O2 sample.c
而我收到的错误是:
./sample.c:178: warning: missing initializer
./sample.c:178: warning: (near initialization for 'example_directives[4].func')
错误的行指向只包含{ NULL }
的行。
apache 模块教程还建议我们使用程序员很少使用的带有参数的函数。因此,我一直收到这些警告:
warning: unused parameter
如何在启用扩展错误检查的情况下修复所有这些错误?
gcc 显然希望您初始化结构的所有成员。尝试用 { NULL, { NULL }, NULL, 0, 0, NULL } 替换最后一个条目。这些值应该匹配通常在 /usr/include/httpd/http_config.h
中找到的 command_rec 结构定义
我访问了以下 URL 以获取有关构建 apache 模块的说明:
https://httpd.apache.org/docs/2.4/developer/modguide.html
它在页面的中途指出自定义模块需要类似于以下的代码来处理 apache 配置文件中的条目:
static const command_rec example_directives[] =
{
AP_INIT_TAKE1("exampleEnabled", example_set_enabled, NULL, RSRC_CONF, "Enable or disable mod_example"),
AP_INIT_TAKE1("examplePath", example_set_path, NULL, RSRC_CONF, "The path to whatever"),
AP_INIT_TAKE2("exampleAction", example_set_action, NULL, RSRC_CONF, "Special action value!"),
{ NULL }
};
它在没有 gcc 选项的 apxs 下编译得很好。它不会在启用扩展错误检查的情况下进行编译。例如,我发出了这个命令:
apxs -i -a -Wc,Werror -Wc,-Wall -Wc,-Wextra -Wc,-O2 -c ./sample.c --enable-debug=YES
尝试执行 gcc -Wall -Wextra -O2 sample.c
而我收到的错误是:
./sample.c:178: warning: missing initializer
./sample.c:178: warning: (near initialization for 'example_directives[4].func')
错误的行指向只包含{ NULL }
的行。
apache 模块教程还建议我们使用程序员很少使用的带有参数的函数。因此,我一直收到这些警告:
warning: unused parameter
如何在启用扩展错误检查的情况下修复所有这些错误?
gcc 显然希望您初始化结构的所有成员。尝试用 { NULL, { NULL }, NULL, 0, 0, NULL } 替换最后一个条目。这些值应该匹配通常在 /usr/include/httpd/http_config.h
中找到的 command_rec 结构定义