2013-10-21 35 views
3

我在C++中构建了一个.CGI。这个二进制文件依赖于一些boost共享库和其他资源在一个特定的文件夹/usr/local/boost/。该CGI不执行,并在日志中我可以看到错误用于Apache cgi脚本的LD_LIBRARY_PATH

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> 

我也曾尝试(见下文discurrion)以添加ldconfig的一个.conf文件,但它仍然无法正常工作!

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

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

我也reead是httpd继承运行它的root用户的环境变量;作为我的根我打电话以下启动Apache和LD_LIBRARY_PATH已正确设置,但仍然是错误的。

/etc/init.d/httpd start 

我正在使用Red Hat 6.2。

+0

你在myconfig.conf中有:#/ usr/local/boost,“#”删除了吗? – jacouh

+0

我暂时切换到MONGOOSE,并在10分钟内立即开始工作。 –

回答

3

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

创建一个配置文件,添加字符串的/ usr /本地/升压它:

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

然后运行:

# ldconfig 

最后:

# /etc/init.d/apache2 restart 

我不知道如何在红帽做到这一点。

+0

嗨Jacouh!非常感谢。这将解决该问题,但它会自动更改或为我的所有应用程序库搜索路径。你知道是否有另一种解决方案? –

+0

你能重新组合所有个人.so在一些合理数量的目录,并将其全部添加到每行配置文件行吗? – jacouh

+0

我会尝试。希望不会对我正在合作的那群人产生影响。无论如何,这是对我的问题的解决方案,并给了我一个关于未来更好的计划文件夹的方法。 –