我正在尝试在我的实验室中复制一个生产机器,我已经安装了 apache,并且我正在尝试使用从生产环境复制的配置,结果出现以下错误:
[root@hnm]/usr/local/apache2/bin$./apachectl -k start -f /usr/local/apache2/conf/hdm /httpd.conf httpd: /usr/local/apache2/conf/hdm/httpd.conf 第 939 行语法错误:/usr/local/apache2/conf/hdm/modules.conf 第 29 行语法错误:无法将 /usr/local/apache2/modules /mod_cwmp_22.so 加载到服务器:ld.so.1: httpd: 致命:重定位错误:文件 /usr/local/apache2 /modules/mod_cwmp_22.so:符号 curl_easy_init:未找到引用的符号
答案1
让我们分解一下您的错误信息:
无法将 /usr/local/apache2/modules /mod_cwmp_22.so 加载到服务器中:
嗯,很明显。
ld.so.1:httpd:致命:重定位错误:
ld.so.1 是运行时动态加载器。当您启动动态链接的应用程序时(在 Solaris 上,所有内容都是动态链接的),动态加载器需要引入所有库。它还需要确保它不仅拥有所有文件,而且还链接了所有引用,包括代码和数据。
文件 /usr/local/apache2 /modules/mod_cwmp_22.so: 符号 curl_easy_init: 未找到引用的符号
现在,我们开始吧。动态加载器引入了依赖于 curl (libcurl) 的 cwmp 模块。它似乎找到了 libcurl.so(否则您会看到不同的错误),但它找不到特定符号。也就是说:它知道 cwmp 模块需要函数调用 curl_easy_init,但它找不到它。
我猜是 libcurl 版本不匹配。webserver 模块是针对 libcurl 的一个版本构建的,但现在您尝试在开发机上运行另一个版本。
我会检查 libcurl 的版本。也许strings -a
在 dev 和 prod 上都对 libcurl 进行检查,确保它们匹配。您可以使用 readelf 等其他工具来验证这些,但我最大的猜测是您可以从 prod 复制 libcurl 并将其放在 dev 中您可以看到的某个位置。