私は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/lib/apache2 の API モジュール構造 'foo_module' /modules/mod_foo.so が文字化けしています - 予想される署名は 41503232 ですが、41503234 が表示されました - おそらくこれは Apache モジュール DSO ではないか、別の Apache バージョン用にコンパイルされたのでしょうか?
モジュールをロードするために追加しましたが、このエラーが発生するのは C++ モジュールだけですLoadModule
。httpd.conf
この問題を解決する方法について何か考えはありますか?