如何解决Ubuntu的Linux发行版中的“cannot open shared object file”错误
从源代码安装程序时,加载共享库时出错。
error while loading shared libraries:
cannot open shared object file: No such file or directory
例如,我尝试使用FreeRADIUS服务器,报错:
radiusd: error while loading shared libraries: libfreeradius-radius-2.1.10.so: cannot open shared object file: No such file or directory
修复"无法打开共享库文件:无此类文件或者目录"错误
修复‘cannot open shared object file: No such file or directory' 错误
我们需要做的就是打开终端(Ctrl + Alt + T)并键入以下命令:
sudo /sbin/ldconfig -v
什么是共享对象文件?上面的命令如何解决该问题?
我们会看到,在C / C ++中,.so(共享对象)是已编译的库文件。之所以称为共享对象,是因为该库文件可以被多个程序共享。这些生成的库通常位于/ lib或者/ usr / lib目录中。
现在,如果我们想知道这个微小的命令是如何解决此问题的,那么我们应该阅读ldconfig的手册页,其中指出:
ldconfig creates the necessary links and cache to the most recent shared libraries found in the directories specified on the command line, in the file /etc/ld.so.conf, and in the trusted directories (/lib and /usr/lib). The cache is used by the run-time linker, ld.so or ld-linux.so. ldconfig checks the header and filenames of the libraries it encounters when determining which versions should have their links updated.
解决"无法打开共享对象文件"错误的替代方法
假设我们看到此错误:
error while loading shared libraries: libgobject-2.0.so.0: cannot open shared object file: No such file or directory
问题出在libgobject 2.0版上。版本号很重要,因为某些程序依赖于库的特定版本,如果找不到,就会报错。
现在,apt提供了搜索选项,可用于在安装之前搜索软件包并了解其版本。
theitroad@localhost:~$ apt search libgobject Sorting... Done Full Text Search... Done librust-gobject-sys-dev/focal 0.9.0-2 amd64 FFI bindings to libgobject-2.0 - Rust source code
现在,如果我们知道尝试运行Rust程序,则可能需要此librust-gobject-sys-dev软件包。但是,如果我们正在运行的Python程序抱怨它呢?
我们可以通过在搜索时从包名称中删除lib来扩大搜索范围。 lib表示库,并且库可以由通用包提供,该通用包可以命名为gobject-xyz。
在包名中搜索字符串(而不是描述)是一个好主意,以获得更简洁的结果。
theitroad@localhost:~$ apt search --names-only gobject Sorting... Done Full Text Search... Done gobject-introspection/focal-updates 1.64.1-1~ubuntu20.04.1 amd64 Generate interface introspection data for GObject libraries libavahi-gobject-dev/focal 0.7-4ubuntu7 amd64 Development headers for the Avahi GObject library libavahi-gobject0/focal 0.7-4ubuntu7 amd64 Avahi GObject library libcairo-gobject-perl/focal,now 1.005-2 amd64 [installed,automatic] integrate Cairo into the Glib type system in Perl libcairo-gobject2/focal,now 1.16.0-4ubuntu1 amd64 [installed,automatic] Cairo 2D vector graphics library (GObject library) libghc-gi-gobject-dev/focal 2.0.19-1build1 amd64 GObject bindings libghc-gi-gobject-doc/focal,focal 2.0.19-1build1 all GObject bindings; documentation
在上面的截断输出中,我们必须查看该软件包是否与我们尝试运行的原始程序有关。我们还必须检查提供的库的版本。
确定正确的软件包后,按以下方式安装:
sudo apt package_name
安装后,我们可以再次运行ldconfig命令以更新高速缓存:
sudo /sbin/ldconfig -v