#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
сделал то, что мне было нужно.