Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
apxs apache module creator将库编译为共享对象linux/unix_C_Linux_Apache_Module_Shared Libraries - Fatal编程技术网

apxs apache module creator将库编译为共享对象linux/unix

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

我正在尝试创建一个新的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文件吗?

acos()
libm
的函数。您必须指定,您的共享库还需要链接
libm
,以满足其要求

尝试以下方式编译:

apxs -i -c mod_anastasia.c ana_browsegrove.c libtcl8.4.a -lm
这将修复未定义的符号问题


对于另一个警告:您也可以尝试链接tcl库的共享版本,方法是将
libtcl8.4.a
替换为
-ltcl8.4
(如果系统中正确安装了相应的tcl库)。将静态库链接到共享库可能会有问题,应避免使用。

谢谢!简单地添加-lm就解决了这个问题。棒 极 了