Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.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
C++ 找不到Linux-SO文件_C++_C_Linux_Environment Variables_Shared Libraries - Fatal编程技术网

C++ 找不到Linux-SO文件

C++ 找不到Linux-SO文件,c++,c,linux,environment-variables,shared-libraries,C++,C,Linux,Environment Variables,Shared Libraries,我有一个程序需要安装liblog4cpp才能运行 现在,我想让程序在另一台机器上运行,而不使用liblog4cpp。因此,我只需找到log4cpp.So并将其移动到程序的同一目录中。但在运行时报告了错误: 加载共享库时出错:liblog4cpp.so.4:无法打开 共享对象文件:没有这样的文件或目录 我做得对吗?如何告诉程序找到它旁边的SO文件?将LD_LIBRARY_PATH导出到库的路径。此env变量的工作原理与PATH变量非常相似。它可以包含多个路径,路径之间用:。检查您的LD\U LIB

我有一个程序需要安装
liblog4cpp
才能运行

现在,我想让程序在另一台机器上运行,而不使用
liblog4cpp
。因此,我只需找到
log4cpp.So
并将其移动到程序的同一目录中。但在运行时报告了错误:

加载共享库时出错:liblog4cpp.so.4:无法打开 共享对象文件:没有这样的文件或目录


我做得对吗?如何告诉程序找到它旁边的SO文件?

将LD_LIBRARY_PATH导出到库的路径。此env变量的工作原理与PATH变量非常相似。它可以包含多个路径,路径之间用:。

检查您的LD\U LIBRARY\u PATH环境变量。。。路径上的一个目录应该指向
log4cpp.so
文件的位置;另外,linux命令
ldd
可以方便地确定可执行文件中正在使用哪些共享对象库。语法是<>代码> LDD .

除了别人的建议之外,还可以考虑将文件添加到动态链接器的缓存中。您可以这样做:

ldconfig -l /path/to/lib/liblog4.so.4
要将其添加到加载程序的缓存,请使用以下命令:
ldconfig

然后,为了验证是否已正确添加,请运行以下操作:

ldconfig -v | grep liblog

将共享对象(或共享库
lib*.so*
,或此类符号链接)添加到动态链接器(或
ld.so
)已知的
/usr/lib
/lib
等系统目录后,需要运行


您也可以将它们添加到
/usr/local/lib/
中,但要确保
/etc/ld.so.conf
(或一些文件
/etc/ld.so.conf.d/*.conf
)提到该目录(并在更改后运行
ldconfig

假设
.so
文件可用的路径是
/path
,也可以避免导出环境变量,只需使用

LD_LIBRARY_PATH=/path ./myProgram
请注意,如果您这样做:

export LD_LIBRARY_PATH=/path
您正在将
LD\u LIBRARY\u PATH
重置为单个值
/PATH
,并丢失之前添加到此环境变量的所有内容。如果您想添加一个值而不丢失以前的值

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path

在启动程序的rc脚本中,应在启动应用程序之前设置LD_LIBRARAY_路径。记住,共享库也是如此,在运行时需要链接。因此,在启动之前,它应该在标准路径中可用,如/usr/lib。 如果未在标准路径(如/usr/lib)中复制,请使用以下命令指定路径

export LD_LIBRARY_PATH=<new_path_of_so>:$(LD_LIBRARY_PATH)
$strace <binary_name>
export LD\u LIBRARY\u PATH=:$(LD\u LIBRARY\u PATH)
理想情况下,我会将它放在像/usr/lib这样的标准路径中。如果安装在标准路径中,则无需设置上述路径。请记住,为了使程序更好,请将新路径放在ldconfig.conf中

您可以使用以下命令调试此类错误

export LD_LIBRARY_PATH=<new_path_of_so>:$(LD_LIBRARY_PATH)
$strace <binary_name>
$strace
了解so依赖关系

$ldd <binary_name>
$ldd
有关更多信息,请查看下面的链接


是不是
log4cpp.so
只是指向
liblog4cpp.so.4
的符号链接?使用
文件log4cpp.so
命令检查。“ldd log4cpp.so”更具体