Как скомпилировать модуль apache с включенной библиотекой sds с помощью apxs2

#apache #apxs2

Вопрос:

Я получаю пример модуля apache2 здесь:

https://httpd.apache.org/docs/2.4/developer/modguide.html

и я хочу использовать там эту библиотеку sds https://github.com/antirez/sds

Поэтому я создам новый модуль и goto module dir:

 apxs -g -n mymodule
cd mod_mymodule
 

добавьте в строку 44 mod_mymodule.c:

 #include "sds.h"
 

и в mymodule_handler в строке 49 я добавлю

 sds a = sdsnew("a");
sds b = sdsnew("b");
if (sdscmp(a, b) == 0) 
    return (DECLINED);
 

Я также помещаю файлы библиотеки (sds.c, sds.h, sdsalloc.h) в тот же каталог, что и файл исходного кода моего модуля, а затем я вызову:

 sudo apxs -i -a -c mod_mymodule.c
 

Затем я перезапущу apache, но он не запустится из-за:

 apache2: Syntax error on line 146 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/mymodule.load: Cannot load /usr/lib/apache2/modules/mod_mymodule.so into server: /usr/lib/apache2/modules/mod_mymodule.so: undefined symbol: sdscmp
 

Вопрос: Как я могу изменить команду apxs, чтобы мой новый модуль работал с включенной библиотекой?

Ответ №1:

Если вы хотите связать их вместе в свой модуль, вы должны передать все файлы .c. Сначала оставьте тот, который является модулем, в противном случае вам также придется передать-n для имени модуля.

Если бы «sds» вместо этого была установленной библиотекой, вы бы передали-lsd в apx так же, как вы бы компилировали без apx.

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

1. sudo apxs -i -a -c mod_mymodule.c sds.c сделал то, что мне было нужно.