如何使用 apxs2 编译包含 sds 库的 apache 模块
How to compile apache module with included sds library using apxs2
我在这里得到示例 apache2 模块:
https://httpd.apache.org/docs/2.4/developer/modguide.html
我想在那里使用这个 sds 库 https://github.com/antirez/sds
所以我将创建新模块并转到模块目录:
apxs -g -n mymodule
cd mod_mymodule
在mod_mymodule.c的第44行添加:
#include "sds.h"
并进入第 49 行的 mymodule_handler 我将添加
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 命令以使我的新模块与包含的库一起工作?
如果你想 link 它们一起进入你的模块,你将传递所有的 .c 文件。保留作为模块的那个,否则您还必须传递 -n 作为模块名称。
如果“sds”是一个已安装的库,您可以将 -lsds 传递给 apxs,就像在没有 apxs 的情况下进行编译一样。
我在这里得到示例 apache2 模块:
https://httpd.apache.org/docs/2.4/developer/modguide.html
我想在那里使用这个 sds 库 https://github.com/antirez/sds
所以我将创建新模块并转到模块目录:
apxs -g -n mymodule
cd mod_mymodule
在mod_mymodule.c的第44行添加:
#include "sds.h"
并进入第 49 行的 mymodule_handler 我将添加
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 命令以使我的新模块与包含的库一起工作?
如果你想 link 它们一起进入你的模块,你将传递所有的 .c 文件。保留作为模块的那个,否则您还必须传递 -n 作为模块名称。
如果“sds”是一个已安装的库,您可以将 -lsds 传递给 apxs,就像在没有 apxs 的情况下进行编译一样。