加载共享库时出现 Linux 错误:无法打开共享对象文件:没有此文件或目录

2024-09-30 14:02:00
admin
原创
92
摘要:问题描述:程序是 Xenomai 测试套件的一部分,从 Linux PC 交叉编译到 Linux+Xenomai ARM 工具链。# echo $LD_LIBRARY_PATH ...

问题描述:

程序是 Xenomai 测试套件的一部分,从 Linux PC 交叉编译到 Linux+Xenomai ARM 工具链。

# echo $LD_LIBRARY_PATH                                                                                                                                          
/lib                                                                                                                                                             
# ls /lib                                                                                                                                                        
ld-2.3.3.so         libdl-2.3.3.so      libpthread-0.10.so                                                                                                       
ld-linux.so.2       libdl.so.2          libpthread.so.0                                                                                                          
libc-2.3.3.so       libgcc_s.so         libpthread_rt.so                                                                                                         
libc.so.6           libgcc_s.so.1       libstdc++.so.6                                                                                                           
libcrypt-2.3.3.so   libm-2.3.3.so       libstdc++.so.6.0.9                                                                                                       
libcrypt.so.1       libm.so.6                                                                                                                                    
# ./clocktest                                                                                                                                                    
./clocktest: error while loading shared libraries: libpthread_rt.so.1: cannot open shared object file: No such file or directory                                 

.1文件名末尾有 吗?那到底是什么意思?


解决方案 1:

你的库是一个动态库。你需要告诉操作系统在运行时它可以在哪里找到它。

为此,我们需要执行以下简单的步骤:

  1. 如果您不知道图书馆的位置,请找到它的位置。

sudo find / -name the_name_of_the_file.so
  1. 检查动态库路径环境变量是否存在( LD_LIBRARY_PATH)

echo $LD_LIBRARY_PATH

如果没有任何内容可显示,请添加默认路径值(如果愿意,可以不添加)

LD_LIBRARY_PATH=/usr/local/lib
  1. 我们添加所需的路径,将其导出并尝试该应用程序。

请注意,路径应为 所在的目录path.so.something。因此,如果path.so.something位于 中/my_library/path.so.something,则应为:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_library/

参考来源

解决方案 2:

您可以尝试以下几种解决方案:

ldconfig

正如 AbiusX 指出的那样:如果您刚刚安装了该库,您可能只需要运行ldconfig

sudo ldconfig

ldconfig 创建必要的链接和缓存,指向在命令行上指定的目录、文件 /etc/ld.so.conf 和受信任的目录(/lib 和 /usr/lib)中找到的最新共享库。

通常,当您安装新库时,包管理器会处理这个问题,但并非总是如此,即使这不是您的问题,运行 ldconfig 也不会有什么坏处。

开发包或错误版本

如果这不起作用,我还会查看Paul 的建议并寻找“-dev”版本的库。许多库分为 dev 和非 dev 包。您可以使用以下命令查找它:

apt-cache search <libraryname>

如果您只是安装了错误版本的库,这也会有所帮助。一些库同时发布了不同的版本,例如 Python。

图书馆位置

如果您确定安装了正确的软件包,而 ldconfig 找不到它,那么它可能只是在非标准目录中。默认情况下,ldconfig 会在/lib/usr/lib/etc/ld.so.conf和 中列出的目录中查找$LD_LIBRARY_PATH。如果您的库在其他地方,您可以在 中单独一行中添加目录/etc/ld.so.conf,将库的路径附加到$LD_LIBRARY_PATH,或将库移动到/usr/lib。然后运行ldconfig​​。

要找到图书馆在哪里,请尝试以下操作:

sudo find / -iname *libraryname*.so*

(替换libraryname为您的图书馆名称)

如果您选择这条$LD_LIBRARY_PATH路线,您需要将其放入您的~/.bashrc文件中,以便它每次您登录时都会运行:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/library

解决方案 3:

更新

虽然我下面所写的关于共享库的一般答案是正确的,但我认为出现此类消息的最常见原因是您安装了一个包,但没有安装-dev该包的版本。


好吧,它没撒谎——列表中没有libpthread_rt.so.1。你可能需要重新配置并重新构建它,以便它依赖于你拥有的库,或者安装任何提供的libpthread_rt.so.1

通常,.so 后面的数字是版本号,并且您经常会发现它们是彼此的符号链接,因此如果您拥有 libfoo.so 的 1.1 版本,那么您将有一个真正的文件 libfoo.so.1.0,以及指向 libfoo.so.1.0 的符号链接 foo.so 和 foo.so.1。并且如果您安装版本 1.1 而不删除另一个版本,那么您将拥有一个 libfoo.so.1.1,并且 libfoo.so.1 和 libfoo.so 现在将指向新的版本,但是任何需要该精确版本的代码都可以使用 libfoo.so.1.0 文件。仅依赖版本 1 API 但不关心它是 1.0 还是 1.1 的代码将指定 libfoo.so.1。正如orip在评论中指出的那样,这里对此进行了很好的解释。

对于你的情况,你可以使用符号链接libpthread_rt.so.1libpthread_rt.so。不过,不能保证它不会破坏你的代码并抢走你的电视晚餐。

解决方案 4:

您需要确保在编译.c 文件时在链接期间指定库路径:

gcc -I/usr/local/include xxx.c -o xxx -L/usr/local/lib -Wl,-R/usr/local/lib

该部分告诉生成的二进制文件在尝试使用中的库之前-Wl,-R还要在运行时查找中的库。/usr/local/lib`/usr/lib/`

解决方案 5:

尝试将LD_LIBRARY_PATH指示搜索路径~/.bashrc

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path_to_your_library

有用!

解决方案 6:

linux.org参考页面解释了其机制,但没有解释其背后的动机 :-(

有关信息,请参见Sun Linker and Libraries Guide

此外,请注意,“外部版本控制”在 Linux 上已基本过时,因为符号版本控制(GNU 扩展)允许您在单个库中同时存在同一函数的多个不兼容版本。此扩展允许 glibc 拥有相同的外部版本:libc.so.6过去 10 年。

解决方案 7:

cd /home/<user_name>/
sudo vi .bash_profile

在最后添加以下几行

LD_LIBRARY_PATH=/usr/local/lib:<any other paths you want>
export LD_LIBRARY_PATH

解决方案 8:

另一种可能的解决方案取决于您的情况。

如果您知道 libpthread_rt.so.1 与 libpthread_rt.so 相同,那么您可以通过以下方式创建符号链接:

ln -s /lib/libpthread_rt.so /lib/libpthread_rt.so.1

然后ls -l /lib现在应该显示符号链接以及它指向的内容。

解决方案 9:

想要补充的是,如果您的库位于非标准路径,请ldconfig按照路径运行。

例如我必须运行:

sudo ldconfig /opt/intel/oneapi/mkl/2021.2.0/lib/intel64

使 R 针对 Intel MKL 进行编译

解决方案 10:

我遇到了类似的错误,在 ~/.bashrc 中提供 LD_LIBRARY_PATH 也无法解决问题。解决我问题的方法是添加 .conf 文件并加载它。转到终端并进入 su。

gedit /etc/ld.so.conf.d/myapp.conf

在此文件中添加您的库路径并保存。(例如:/usr/local/lib)。您必须运行以下命令来激活路径:

ldconfig

验证您的新库路径:

ldconfig -v | less

如果这显示了您的库文件,那么您就可以开始了。

解决方案 11:

在 Linux x86 上使用 Eclipse CDT 运行应用程序时出现此错误。

要修复此问题:

  1. 在 Eclipse 中:

运行方式 -> 运行配置 -> 环境

  1. 设置路径

LD_LIBRARY_PATH=/my_lib_directory_path

解决方案 12:

.dll如果您在 Microsoft Windows 上运行应用程序,则需要在环境变量中定义动态库()的路径PATH

.so如果您在 UNIX 上运行应用程序,则需要在环境变量中定义动态库()的路径LD_LIBRARY_PATH

解决方案 13:

尝试安装lib32z1

sudo apt-get install lib32z1

解决方案 14:

我使用 Ubuntu 18.04

安装相应的-dev软件包对我来说是有效的,

sudo apt install libgconf2-dev

在安装上述软件包之前,我收到以下错误:

turtl: error while loading shared libraries: libgconf-2.so.4: cannot open shared object file: No such file or directory

解决方案 15:

我所要做的就是运行:

sudo apt-get install libfontconfig1

我位于该文件夹中/usr/lib/x86_64-linux-gnu,它运行完美。

解决方案 16:

发生此错误是因为系统无法引用所提到的库文件。请采取以下步骤:

  1. 运行locate libpthread_rt.so.1将列出所有具有该名称的文件的路径。假设路径为/home/user/loc

  2. 复制路径并运行cd home/USERNAME。将 USERNAME 替换为您要运行该文件的当前活动用户的名称。

  3. 运行vi .bash_profile并在参数末尾LD_LIBRARY_PATH(就在 之前.)添加行/lib://home/usr/loc:.。保存文件。

  4. 关闭终端并重新启动应用程序。它应该运行。

解决方案 17:

我遇到了这个错误,我认为这和你的原因是一样的

加载共享库时出错:libnw.so:无法打开共享对象文件:没有此文件或目录

试试这个。修复文件权限:

cd /opt/Popcorn (or wherever it is) 
chmod -R 555 * (755 if not ok) 

解决方案 18:

我遇到了这个错误,我认为这和你的原因是一样的

error while loading shared libraries: libnw.so: cannot open shared object 
file: No such file or directory

试试这个。修复文件权限:

sudo su
cd /opt/Popcorn (or wherever it is) 
chmod -R 555 * (755 if not ok) 
chown -R root:root *

解决方案 19:

这里有类似的问题 。我试过提到的解决方案,它确实有效。

前面问题中的解决方案可能有效。但以下是修复此问题的简单方法。通过libwbclient
在 Fedora 中重新安装软件包即可:

dnf reinstall libwbclient

解决方案 20:

原因/解决方案

Apparmor:

在较新的 Debian 版本中(我认为 >= Debian11),从 debian repo 安装 clamav 时配置了 apparmor。

如果在重新安装clamav deb 包之前没有完全卸载 clamav ,或者配置中发生了任何变化(例如 clamav 定义路径),则还必须在/etc/apparmor.d/usr.sbin.clamd(之后systemctl reload apparmor:)中进行调整

一个弱但即时的解决方法是添加标志来放宽 apparmor,这样它会记录并抱怨对非常规位置的访问,但不会严重失败:

/usr/local/sbin/clamd flags=(complain,attach_disconnected){
...

tldr

我在 2024 年使用 clamav 时遇到了这个问题:

/usr/local/sbin/clamd:加载共享库时出错:libclamav.so.11:无法打开共享对象文件:没有此文件或目录

尽管 /usr/local/lib 中的权限正确,但strace /usr/local/sbin/clamd显示:

openat(AT_FDCWD,“/usr/local/lib/libclamav.so.11”,O_RDONLY|O_CLOEXEC) = -1 EACCES(权限被拒绝)

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用