【问题标题】:How to run c++ module in apache?如何在 apache 中运行 c++ 模块?
【发布时间】:2013-01-31 08:44:09
【问题描述】:

我已经在 apache 中编写了 c++ 模块。以下是代码::

mod_foo.hpp

#ifndef MOD_FOO_HPP
#define MOD_FOO_HPP
#ifdef __cplusplus
#define EXTERN_C_BLOCK_BEGIN    extern "C" {
#define EXTERN_C_BLOCK_END      }
#define EXTERN_C_FUNC           extern "C"
#else
#define EXTERN_C_BLOCK_BEGIN
#define EXTERN_C_BLOCK_END
#define EXTERN_C_FUNC
#endif
#include <httpd.h>
#include <http_protocol.h>
#include <http_config.h>**
#endif  /* MOD_FOO_HPP */

mod_foo.c

#include "mod_foo.hpp"

EXTERN_C_FUNC
int foo_handler( request_rec* inpRequest )
{
    int nReturnVal = DECLINED;

    if ( inpRequest->handler != NULL && strcmp( inpRequest->handler, "foo" ) == 0 )
    {
        ap_rputs( "Hello World from FOO", inpRequest );
        nReturnVal = OK;
    }

    return nReturnVal;
}

EXTERN_C_FUNC
void foo_hooks( apr_pool_t* inpPool )
{
    ap_hook_handler( foo_handler, NULL, NULL, APR_HOOK_MIDDLE );
}

EXTERN_C_BLOCK_BEGIN
module AP_MODULE_DECLARE_DATA foo_module =
{
    STANDARD20_MODULE_STUFF,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    foo_hooks
};
EXTERN_C_BLOCK_END

模块编译成功,它也在apache服务器上安装,但是当我安装后重新启动apache服务器时出现以下错误:

apache2:/etc/apache2/apache2.conf 第 234 行的语法错误:/etc/apache2/conf.d/foo.conf 第 1 行的语法错误:文件 /usr/ 中的 API 模块结构 'foo_module' lib/apache2/modules/mod_foo.so 是乱码 - 预期签名 41503232 但看到 41503234 - 也许这不是 Apache 模块 DSO,或者是为不同的 Apache 版本编译的?

我在httpd.conf 中添加了LoadModule 来加载模块,但只有c++ 模块会出现此错误。关于如何解决这个问题的任何想法?

【问题讨论】:

标签: c++ apache2


【解决方案1】:

我认为处理程序应该声明为静态,这可能会导致错误,除了你应该在模块前面添加前缀extern“C”,但添加每个带有extern“C”前缀的函数是不必要的。

【讨论】:

    猜你喜欢
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2011-05-29
    • 2017-07-25
    • 2018-08-28
    • 2019-01-08
    • 1970-01-01
    相关资源
    最近更新 更多