Sziasztok,
beleszaladtam egy kis Apache modulhegesztesbe. Sajnos nem ertek hozza annyira, amennyire szeretnek, ezert problema a kovetkezo:
Adott egy Apache MPM, amit szeretnek dinamikusan konfiguralni. Ebbe beleirtam azt a tudomanyt, hogy hookbol tudjon mukodni. mympm.h-ba:
typedef struct
{
...
} mympm_server_conf;
AP_DECLARE_HOOK(int,mympm_configure,(request_rec *r));
mympm.c-be:
APR_HOOK_STRUCT(
APR_HOOK_LINK(mympm_configure)
)
AP_IMPLEMENT_HOOK_RUN_FIRST(int,mympm_configure,(request_rec *r),(r),DECLINED);
A megfelelo helyre pedig:
mympm_server_conf *sconf = (mympm_server_conf *) ap_run_mympm_configure(r);
A betoltendo konfiguralo modul register_hooks fuggvenyebe:
#include "mympm.h"
ap_hook_mympm_configure(mymodule_mympm_configure, NULL, NULL, APR_HOOK_MIDDLE);
Illetve a fuggveny:
static int
mymodule_mympm_configure(request_rec *r)
{
...
}
Leforgatom az egesz kocerajt es megnezem a symbolokat, akkor azt latom, hogy a mympm.o exportalja az ap_hook_mympm_configure-t:
000009b0 T ap_hook_mympm_configure
Viszont amikor elindul az Apache, panaszkodik ra:
apache2: Syntax error ...: Cannot load /usr/lib/apache2/modules/mod_mymodule.so into server: /usr/lib/apache2/modules/mod_mymodule.so: undefined symbol: ap_hook_mympm_configure
Probaltam betenni az mpm_common.c-be is az APR_HOOK_LINK-et, de ettol az mpm_common.o-ban nem latszott, hogy exportalja. Mit kell ahhoz tenni, hogy az illeto hookot elerjem?
- 886 megtekintés
Hozzászólások
a mympm.o keves, hogy exportal, a mympm.so -nak kell exportalnia.
extern nem kellene esetleg valahova?
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
A mympm nem SO file, az belegyogyul az Apache executablebe, ha jol ertelmeztem. Elvileg az AP kezdetu dolgok makrok, amik ezeket a dolgokat hivatottak megoldani. Megnezem az externt, hatha kell benne, de a tobbi modulban sem lattam.
Update: Az APR eszkozcsomagban van definialva az AP_DECLARE_HOOK:
/^[ \t]*AP_DECLARE_HOOK[^(]*[(][^)]*/ {
split($0, args, ",")
symbol = args[2]
sub("^[ \t]+", "", symbol)
sub("[ \t]+$", "", symbol)
add_symbol("ap_hook_" symbol)
add_symbol("ap_hook_get_" symbol)
add_symbol("ap_run_" symbol)
next
}
Nem tudom, ez segit-e...
Update 2: mint kiderult, a ./server/exports.c-ben nem szerepel, ugyhogy azt fogom visszakovetni.
Update 3: a Makefileba kellett betenni, hogy az MPM utvonalabol is nyalja fol a .h fileokat az exports.c-hez.
- A hozzászóláshoz be kell jelentkezni
Telleg igazad van, most jovok ra, a mpm-ek az egyetlen dolgok, amik statikusak. Sry.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni