как открыть файл so при разработке модуля apache с помощью apxs

#c #c #dlopen #apache-modules #apxs2

#c #c #dlopen #apache-модули #apxs2

Вопрос:

Я пытаюсь открыть файл so в модуле apache с помощью этого кода :

 #include <dlfcn.h>
#include <stdbool.h>
#include <httpd.h>
#include <http_protocol.h>
#include <http_config.h>



static int helloworld_handler(request_rec* r)
{
if (!r->handler || strcmp(r->handler, "helloworld"))
    return DECLINED;

if (r->method_number != M_GET)
    return HTTP_METHOD_NOT_ALLOWED;


// here i try to load so file --------------------------------
typedef bool (*hello_t)();
void *handle;

handle = dlopen ("/lib.so", RTLD_LAZY);
hello_t echo = (hello_t) dlsym(handle, "echo");

echo();


 // ------------------------------------------------------------
 return OK;
}

static void register_hooks(apr_pool_t* pool)
{
    ap_hook_handler(helloworld_handler, NULL, NULL, APR_HOOK_MIDDLE);
}


module AP_MODULE_DECLARE_DATA helloworld_module = {
    STANDARD20_MODULE_STUFF,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    register_hooks
   };
 

я включил заголовочный файл dlfcn.h, но не работаю!
компиляция с помощью этого: apxs -i -a -c mod_helloworld.c
я пытаюсь скомпилировать с помощью -ldl: apxs -i -a -c Wc,-ldl mod_helloworld.c, но не работает. у меня есть эта ошибка в dlerror () :
/usr/lib/apache2/modules/mod_helloworld.so: неопределенный символ: echo

Комментарии:

1. «Не работает» — не самое подходящее описание для начала. Вы проверили и выявили ошибки после dlopen и dlsym ? Взгляните на примеры в документах

2. Обширное ведение журнала обычно является ключом к успеху в новой / неизвестной среде.

3. я не могу проверить ошибку после dlopen и dlsym в модуле apache, я использую apxs для компиляции этого модуля, я не могу использовать gcc для компиляции, и я не могу linked -ldl увидеть это: httpd.apache.org/docs/2.4/programs/apxs.html

4. Что мешает вам проверять коды результатов dl * функций и регистрировать их с помощью apache logging API ?

5. у меня есть эта ошибка в dlerror (): /usr/lib/apache2/modules/mod_helloworld.so: неопределенный символ: echo