apxs apache module creator将库编译为共享对象linux/unix
我正在尝试创建一个新的Apache2模块,以容纳一个复杂的软件。代码由我自己的C文件组成,这些文件编译成.o文件,然后链接成.so文件。问题是我的代码使用tcl来处理脚本。到目前为止,我已经将tcl(版本8.4.13——是的,它是那么旧)编译成.a归档文件,并将其链接到.o文件以创建一个.so文件,Apache将其作为模块加载,并且所有工作正常。我在基于Mac BSD的系统上发现了这一点,但最终通过以下方式实现了: 1.使用--enable threads--disable shared--disable corefoundation选项编译tcl 2.使用以下内容将.o文件从我的代码链接到tcl库: gcc-DSHARED_MODULE-bundle-undefined suppress-flat_namespace-o mod_anastasia.so Release/*.o libtcl8.5.a 这适用于BSD/Mac。所以现在我需要为Linux服务器编译这个模块。以下是apxs命令(理论上)应该可以工作: apxs-i-c mod_anastasia.c ana_browsegrove.c libtcl8.4.a 这会发出以下警告: *警告:将共享库mod_anastasia.la链接到 静态库libtcl8.4.a不可移植*强> 当我尝试将创建的.so文件加载到Apache中时,肯定会出现以下错误: httpd:/usr/local/apache2/conf/httpd.conf第156行语法错误:无法将模块/mod_anastasia.so加载到服务器:/usr/local/apache2/modules/mod_anastasia.so:未定义的符号:acos 所以我的问题是。。。有谁知道编译.a文件的神奇公式,以便Apache可以将其链接到apxs生成的.o文件吗?apxs apache module creator将库编译为共享对象linux/unix,c,linux,apache,module,shared-libraries,C,Linux,Apache,Module,Shared Libraries,我正在尝试创建一个新的Apache2模块,以容纳一个复杂的软件。代码由我自己的C文件组成,这些文件编译成.o文件,然后链接成.so文件。问题是我的代码使用tcl来处理脚本。到目前为止,我已经将tcl(版本8.4.13——是的,它是那么旧)编译成.a归档文件,并将其链接到.o文件以创建一个.so文件,Apache将其作为模块加载,并且所有工作正常。我在基于Mac BSD的系统上发现了这一点,但最终通过以下方式实现了: 1.使用--enable threads--disable shared--di
acos()
是libm
的函数。您必须指定,您的共享库还需要链接libm
,以满足其要求
尝试以下方式编译:
apxs -i -c mod_anastasia.c ana_browsegrove.c libtcl8.4.a -lm
这将修复未定义的符号问题
对于另一个警告:您也可以尝试链接tcl库的共享版本,方法是将
libtcl8.4.a
替换为-ltcl8.4
(如果系统中正确安装了相应的tcl库)。将静态库链接到共享库可能会有问题,应避免使用。谢谢!简单地添加-lm就解决了这个问题。棒 极 了