LD_LIBRARY_PATH对于Apache的CGI脚本

4

我用C++编写了一个.CGI文件。这个二进制文件依赖于一些boost共享库和其他特定文件夹/usr/local/boost/中的资源。但是这个CGI无法执行,日志中显示了错误信息。

    error while loading shared libraries: libdxxx: cannot 
    open shared object file: No such file or dire

现在,我已经阅读了很多日志,它们都说我必须在httpd.conf中设置以下内容,但仍然无法正常工作。

   SetEnv LD_LIBRARY_PATH /usr/local/boost:

在我的配置文件中,我在文件末尾设置了这行代码"as it is",而且没有包含在任何VirtualHost或Directory部分中。我尝试将其插入到cgi-bin的目录中,但结果仍然相同。
 <Directory "/var/www/cgi-bin">
     AllowOverride None
     Options None
     Order allow,deny
     Allow from all
     SetEnv LD_LIBRARY_PATH /usr/local/boost
 </Directory>

我也尝试过(见下文讨论)添加一个.ldconfig的.conf文件,但它仍然无法工作!

  #added a file called myconfig.conf conrtaining a line
  /usr/local/boost 

  /etc/ld.conf.d/
  ldconfig (as root)

我还看到过这样的说法,httpd继承了运行它的ROOT用户的环境变量;作为ROOT用户,我调用以下命令来启动Apache,LD_LIBRARY_PATH已经正确设置,但仍然有问题。

 /etc/init.d/httpd start

我正在使用Red Hat 6.2操作系统。


在myconfig.conf文件中,你有:#/usr/local/boost,#被删除了吗? - jacouh
我暂时切换到MONGOOSE,所有问题在10分钟内立即解决。 - Abruzzo Forte e Gentile
1个回答

5
在我们的Linux Debian系统中,我们使用以下方法:
创建一个配置文件,在其中添加字符串"/usr/local/boost":
/etc/ld.so.conf.d/boost.conf

然后运行:

# ldconfig

最后,需要注意的是:
# /etc/init.d/apache2 restart

我不知道如何在Red Hat上操作。

你是否已经注释掉了 SetEnv LD_LIBRARY_PATH /opt/ibm/db2/V9.7/lib64?或者将所有的 .so 文件复制到 /usr/local/lib 目录下了吗? - jacouh
嗨jacouh。是的,我做到了(并在我的邮件中纠正了一个小错别字)。 - Abruzzo Forte e Gentile
嗨Jacouh,最后我改用了MONGOOSE。它是一个二进制运行在同一个Shell上面像程序一样,并且它能立即工作。虽然不是很满意这个解决方案,但它确实完成了工作。 - Abruzzo Forte e Gentile
Apache是一个具有多个模块的大型通用服务器。此外,还有许多开发人员可以提供帮助。对于生产站点来说,使用它会更好吗? - jacouh
我会在我们大规模使用它时告诉你。目前我无法进行评估。无论如何,我同意Apache是事实上的标准,我应该更好地了解它。 - Abruzzo Forte e Gentile
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接