我在apache中编写了c ++模块。以下是代码::
#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 */
#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版本编译的?
我在LoadModule
中添加了httpd.conf
来加载模块,但只有c ++模块才会出现此错误。关于如何解决这个问题的任何想法?
答案 0 :(得分:0)
我认为处理程序应该声明为静态,这可能会导致错误,除此之外你应该在模块前面添加一个前缀extern“C”,但是不需要添加带有extern“C”前缀的每个函数。 / p>