Apache 모듈을 C++로 작성하고 싶습니다. 사용 apxs
로 컴파일Apache 모듈을 C++로 작성하려면 어떻게해야합니까?
#include "httpd.h"
#include "http_core.h"
#include "http_protocol.h"
#include "http_request.h"
static void register_hooks(apr_pool_t *pool);
static int example_handler(request_rec *r);
extern "C" module example_module;
module AP_MODULE_DECLARE_DATA example_module = {
STANDARD20_MODULE_STUFF, NULL, NULL, NULL, NULL, NULL, register_hooks
};
static void register_hooks(apr_pool_t *pool) {
ap_hook_handler(example_handler, NULL, NULL, APR_HOOK_LAST);
}
static int example_handler(request_rec *r) {
if (!r->handler || strcmp(r->handler, "example"))
return (DECLINED);
ap_set_content_type(r, "text/plain");
ap_rputs("Hello, world!", r);
return OK;
}
잘 작동하는 것 같다 : 내가 아파치를 시작하려고하면
apxs -i -n example_module -c mod_example.cpp
그러나, 나는 오류가 나는 시작하는 매우 베어 본 모듈을 시도했다. 좀 더 읽기 쉬운 줄 바꿈을 삽입했습니다.
httpd: Syntax error on line 56 of /etc/httpd/conf/httpd.conf:
Syntax error on line 1 of /etc/httpd/conf.modules.d/20-mod_example.conf:
Can't locate API module structure `example_module' in file /etc/httpd/modules/mod_example.so:
/etc/httpd/modules/mod_example.so: undefined symbol: example_module
사실, 나는 mod_example.so
에 example_module
를라는 이름의 기호가 없음을 objdump -t
으로 확인할 수 있습니다. 내가 수동으로 (내가 libtool
이 apxs
내부에서 실행 볼 수있는 명령을 모방하는)
gcc -shared -fPIC -DPIC -o mod_example.so `pkg-config --cflags apr-1` -I/usr/include/httpd mod_example.cpp
로 컴파일하는 경우, 다음 objdump -t
실제로 mod_example.so
에 example_module
기호를 표시 않기 때문에 나는이 특히 혼란을 찾을 수 있습니다.
무엇을 제공합니까? 내 .so
에 example_module
이 표시되지 않는 이유는 무엇입니까? 문제를 해결하려면 어떻게해야합니까?
cpp 파일을 오브젝트 파일로 컴파일 한 다음 오브젝트 파일을 apxs 도구로 전달하는 방법은 무엇입니까? – Ankur
@Ankur 환상적입니다, 제안에 감사드립니다! 당신이 대답으로 대답한다면, 나는 그것을 받아 들일 것이다. 그렇지 않으면 받아 들일 하루 이틀 안에 나 자신을 씁니다. –
Daniel이 @ Ankur의 제안 작업을 했습니까? 그렇다면, 어느 쪽이든 그렇게하는 방법에 대한 메모를 추가하십시오. 저와 당신의 흔적을 따라가는 다른 사람들을 도울 수 있습니다. 고맙습니다. – JulianHarty