gpt4 book ai didi

c++ - 如何在 Apache 中运行 C++ 模块?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:58:05 25 4
gpt4 key购买 nike

我已经在 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: Syntax error on line 234 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/conf.d/foo.conf: API module structure 'foo_module' in file /usr/lib/apache2/modules/mod_foo.so is garbled - expected signature 41503232 but saw 41503234 - perhaps this is not an Apache module DSO, or was compiled for a different Apache version?

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

最佳答案

我认为处理程序应该声明为静态的,这可能会导致错误,此外你应该在模块前面添加一个前缀 extern "C",但是不需要为每个函数添加一个 extern "C"前缀。

关于c++ - 如何在 Apache 中运行 C++ 模块?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14893616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com