【问题标题】:LD_LIBRARY_PATH for Apache cgi script用于 Apache cgi 脚本的 LD_LIBRARY_PATH
【发布时间】:2013-10-21 08:16:55
【问题描述】:

我用 C++ 构建了一个 .CGI。此二进制文件依赖于特定文件夹/usr/local/boost/ 中的一些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:

在我的配置中,我将这一行设置为“原样”在配置文件的末尾,而不包含在任何VirtualHOst or 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, "#" 被删除了?
  • 我临时切换到 MONGOOSE,10 分钟内全部立即生效。

标签: apache cgi environment-variables cgi-bin


【解决方案1】:

在我们的 Linux Debian 盒子中,我们使用这个:

创建一个配置文件,在其中添加字符串 /usr/local/boost:

/etc/ld.so.conf.d/boost.conf

然后运行:

# ldconfig

最后:

# /etc/init.d/apache2 restart

我不知道如何在 Red Hat 中做到这一点。

【讨论】:

  • 嗨雅库!非常感谢。这将解决问题,但它会自动更改我所有应用程序的库搜索路径。不知道有没有其他解决办法?
  • 你能把你所有的个人.so重新组合到一些合理数量的目录中,然后将它们全部添加到配置文件中的每一行吗?
  • 我会试试的。希望不会对与我一起工作的那群人产生影响。无论如何,它是否可以解决我的问题,并让我想到更好地规划未来的文件夹。
  • 您评论过 SetEnv LD_LIBRARY_PATH /opt/ibm/db2/V9.7/lib64 吗?或将所有 .so 文件复制到 /usr/local/lib 中?
  • 嗨,jacouh。是的,我做到了(并更正了我邮件中的一个小错字)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多