找不到Linux-SO文件
Linux - SO file not found
我有一个程序,需要安装liblog4cpp
才能运行。
现在,我希望程序在另一台没有liblog4cpp
的机器上运行。所以我只需要找到log4cpp.so
并将其移动到程序的同一目录中。但在运行时报告错误:
加载共享库时出错:liblog4cpp.so.4:无法打开共享对象文件:没有这样的文件或目录
我做得对吗?如何告诉程序在旁边找到SO文件?
除了其他人的建议外,还可以考虑将文件添加到动态链接器的缓存中。你可以这样做:
ldconfig -l /path/to/lib/liblog4.so.4
要将其添加到加载程序的缓存,请使用以下命令:ldconfig
然后,为了验证它是否正确添加,运行以下命令:
ldconfig -v | grep liblog
检查LD_LIBRARY_PATH环境变量。。。路径上的一个目录应该指向log4cpp.so
文件的位置;linux命令ldd
也可以方便地确定在可执行文件中使用哪些共享对象库。语法为ldd <executable>
。
假设.so
文件的可用路径是/path
,您也可以避免导出环境变量,只使用
LD_LIBRARY_PATH=/path ./myProgram
注意,如果你这样做:
export LD_LIBRARY_PATH=/path
您正在将LD_LIBRARY_PATH
重置为单个值/path
,并丢失之前添加到此环境变量的任何内容。如果你想添加一个值而不丢失以前的
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path
在启动程序的rc脚本中,应该在启动应用程序之前设置LD_LIBRRAY_PATH。请记住,共享库也是如此,在运行时需要链接。因此,在启动之前,它应该在标准路径(如/usr/lib)中可用。如果它没有复制到标准路径(如/usr/lib)中,则使用以下命令指定路径。
export LD_LIBRARY_PATH=<new_path_of_so>:$(LD_LIBRARY_PATH)
理想情况下,我会把这个.so放在/usr/lib这样的标准路径中。如果安装在标准路径中,则无需设置上述路径。请记住,为了使您的程序更好,请将新路径放在ldconfig.conf中。
您可以使用以下方法调试此类错误。
$strace <binary_name>
了解so依赖性
$ldd <binary_name>
有关详细信息,请查看以下链接。
http://www.tune2wizard.com/sharedobject-crash/
export LD_LIBRARY_PATH
到库的路径。这个env变量的工作方式与PATH变量非常相似。它可以包含多个路径,路径之间用:分隔。
将共享对象(或共享库lib*.so*
,或此类符号链接)添加到系统目录(如动态链接器ld-linux.so(8)(或ld.so
)已知的/usr/lib
或/lib
)后,您需要运行ldconfig(8)
您也可以将它们添加到/usr/local/lib/
中,但要确保/etc/ld.so.conf
(或某个文件/etc/ld.so.conf.d/*.conf
).提到该目录(并在更改后运行ldconfig
)
- 无法从 SO 文件调用 SO 文件的函数 - C++生成文件
- 共享库 (.so) 没有扩展名的 Linux 可执行文件之间的区别?
- 如何在 Linux 中从 .so 文件打开可执行文件?
- 如何用.so文件linux打包所有需要的库
- 从多个C++文件生成 .so 文件并使用它
- 不同的数学符号绑定与共享库与 dlopen 并直接链接到可执行文件 (Linux)
- SFML-无法加载映像-无法打开文件-LINUX
- 关于 Linux .so 文件无法链接到主文件.cpp文件
- 将文件的内容重定向为可执行文件linux的标准输入
- WMware 编译 cpp 文件 linux
- 与直接编译的可执行文件相比,linux.so的性能有所下降
- C++ 在 Win DLL 到 Linux SO 转换中将 LPBYTE 更改为无符号字符*后编译器错误
- 找不到Linux-SO文件
- 如何从linux SO库中仅导出某些函数
- 依赖地狱:linux.so插件动态加载
- 在Visual Studio中使用c++构建Linux .so库的必要条件
- 如何查看Linux .so或.a对象的内部并查看它们包含哪些函数
- 将所有库依赖项包含到可执行文件Linux中
- CMake:如何确定所有.DLL/.需要可执行文件的 SO 文件
- check_match.8629中的核心哑码(1)从/lib/ld-linux.so