[megoldva] Apache hookok vs. export symbolok

 ( janoszen | 2008. december 5., péntek - 11:09 )

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?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

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 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.

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.