error while loading shared libraries的解决方案

2023-05-16

当运行程序时会出现如下类似错误时:

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

默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,通常通过源码包进行安装时,如果不指定–prefix,会将库安装在/usr/local/lib目录下;当运行程序需要链接动态库时,提示找不到相关的.so库,会报错。也就是说,/usr/local/lib目录不在系统默认的库搜索目录中,需要将目录加进去。

在明确已经安装该库的情况下出现上述错误,可能是这个库目录并没有加入到该环境变量中,解决办法如下:

一. 更改配置文件

  1. 一般安装目录在:
    /usr/local/lib
    配置文件在:/etc/ld.so.conf文件中
    将该目录加入到共享库的配置文件中

  2. 将动态库文件加入配置:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"。

  3. 保存后,在命令行终端执行:
    /sbin/ldconfig -v
    ldconfig
    其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。

经过以上三个步骤,"error while loading shared libraries"的问题通常情况下就可以解决了。
  
  如果运行应用程序时,还是提示以上错误,那就得确认一下是不是当前用户在库目录下是不是没有可读的权限。像我遇到的问题就是,从别的机子拷贝了一些.so动态库,然后用root权限放到了/usr/local/lib中(普通用户没有对该目录的写权限),然后切换用户运行程序时,始终提示找不到.so库,一直以为是我配置有问题,结果是因为权限原因,那些我用root权限增加到/usr/local/lib中的.so文件对于普通用户而言,是没有访问权限的,所以以普通用户运行程序,当需要链接.so库时,在/usr/local/lib中是查找不到的。

其实,对于由普通用户自己编译生成的.so库文件,比较好的做法是将这些.so库文件的路径用export指令加入到~/.bash_profile中的LD_LIBRARY_PATH变量中,LD_LIBRARY_PATH是程序运行需要链接.so库时会去查找的一个目录,~/.bash_profile是登陆或打开shell时会读取的文件,这样,每次用户登录时,都会把这些.so库文件的路径写入LD_LIBRARY_PATH,这样就可以正常地使用这些.so库文件了。

二. 修改配置文件

修改配置文件,如~/.bashrc~/.bash_profile/etc/profile
其中,普通用户可直接修改~/.bashrc~/.bash_profile,因此,该修改仅对当前用户有效。
root用户可修改/etc/profile,且对所有用户都有效。

下面以修改~/.bashrc文件为例:

vim ~/.bashrc

然后,在.bashrc文件中添加如下内容:

export LD_LIBRARY_PATH=/home/dabai/mpfr-4.0.2/lib:$LD_LIBRARY_PATH

保存并退出后,在终端输入如下命令,以使上述命令生效:

source ~/.bashrc

三. 临时解决方案

在终端使用export命令来配置环境变量,但仅限于当前终端;对于其他终端窗口则需要重新使用export命令才起作用。
export配置环境变量的格式为:

export LD_LIBRARY_PATH=/home/dabai/mpfr-4.0.2/lib:$LD_LIBRARY_PATH

其中,LD_LIBRARY_PATH是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径。

参考:
[1] https://www.cnblogs.com/codingmengmeng/p/7456539.html
[2] https://blog.csdn.net/Xminyang/article/details/125123527
[3] https://blog.csdn.net/wanxuexiang/article/details/84574660

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

error while loading shared libraries的解决方案 的相关文章

  • 在 Adob​​e Brackets IDE 中使用 JavaScript 库?

    如何在 Brackets 中使用库而不让 javascript lint 出错 例如 我正在使用 Chart js 该产品工作完全正常 但 Brackets 给出错误 指出 Chart 在定义之前已被使用 有什么办法可以隐藏这个错误吗 我发
  • Linux下如何动态加载不同目录下的同名库?

    我必须在Linux中动态加载 so 但我发现处理同名库很困难 我在不同的目录中有 2 个 libtest so 它们依赖于其他不同的库 我的程序读取配置文件来决定加载哪个libtest so 例如 usr kyle v1 libtest s
  • jsf/primefaces 在 bean 初始化期间加载指示器

    在我的 JSF Primefaces 项目中 我在 bean 的 init 构造后 方法中加载了大量数据 这就是为什么我想在 Bean 加载期间显示 gif 指示器 我尝试使用 primefaces 和 Ajax 状态 展示的程序化版本 h
  • Android Studio - 自动项目加载

    我找不到一种方法来阻止 Android Studio 自动加载最后使用的项目 我希望它打开开始窗口 其中包含可用项目列表 而不是自动加载上次使用的项目 的位置Reopen last project on startup被移至Settings
  • 如何在页面加载时显示ajax加载gif动画?

    我尝试在我的网站中实现 AJAX 当单击 divchangepass 的内容时 它应该加载changepass template php 这是我为此使用的代码 function changepass click function block
  • 聚合根引用其他聚合根

    我目前正在大量使用 DDD 并且在从其他聚合根加载 操作聚合根时遇到问题 对于模型中的每个聚合根 我还有一个存储库 存储库负责处理根的持久性操作 假设我有两个聚合根 以及一些成员 实体和值对象 聚合根 1 和聚合根 2 AggregateR
  • 在 nextjs 13 上加载页面

    您好 我正在尝试在网站需要时间加载时显示加载页面 因为它是一个相当大的网站 我认为加载屏幕会提供最好的用户体验 但是我似乎无法弄清楚如何让它在 nextjs 13 上工作 我创建了一个简单的功能组件 上面写着加载 并且有将其直接导入到我的l
  • 如何在 OS X 静态库中包含 nib?

    我看过几篇关于 iOS 的文章讨论这个主题 但是一两次提到 OS X 只是说构建一个框架而不是静态库 我找不到有合适框架说明的帖子 我已将项目创建为静态库 并相应地对整个项目进行了编码 现在 我只想将我的框架放入演示应用程序中 但它抱怨缺少
  • Eclipse 中的“Android Private Libraries”文件夹是什么?

    我最初以为它是专门用于像支持库这样的官方库的 然而 每当我使用 添加到构建路径 菜单项添加自定义 JAR 时 它都会自动显示在 引用库 和 Android 私有库 中 其中之一是多余的 因为在构建时导出两者是没有意义的 此外 Android
  • 填充形状的图像不会在 FabricJS 中使用 loadFromJSON 加载

    I have JSON带有 Fabric Rect 对象的数据 当我尝试加载这个时JSON数据到织物画布上从JSON加载 形状加载完美 但形状中填充的图案未渲染 仅在单击形状后才会渲染图案 我已将我的代码复制到织物厨房水槽执行模块中 并尝试
  • 通过 EWS 和 C# 访问没有邮箱的资源日历

    我们的 Exchange 管理员 Exchange 2010 SP1 设置了共享资源日历 没有分配给该资源日历的邮箱 我希望能够使用 EWS 和 C 阅读会议 Snippet ExchangeService esvc new Exchang
  • 在python中将进度值发送到进度条

    在我的游戏中我有两个模块 岛 py它将岛屿加载到我的游戏中 第二个模块是gui py它在游戏开始之前处理 GUI 小部件 我的问题是如何将 island py 模块中的进度值发送到中创建的进度栏gui py module 编辑 还可以使用加
  • 如何安装第三方库

    我对 C 有点陌生 我决定尝试使用odeint做一些模拟 因为 python 太慢了 无法满足我的需求 I found 这个包 http headmyshoulder github io odeint v2 index html 我想玩 我
  • iPhone 的文本转语音库 [重复]

    这个问题在这里已经有答案了 可能的重复 iPhone 上的文字转语音 https stackoverflow com questions 416064 text to speech on iphone 如何开始进行文本到语音转换iPhone
  • 如何在滚动 iPhone 上向 tableview 添加元素?

    我正在使用 UITableView 列出来自 Web 服务的元素 我需要做的是首先从Web服务调用20个元素并显示在列表中 当用户向下滚动时从Web服务调用另外20个记录并添加到表格视图 这个怎么做 您可以从 Web 服务加载 20 个项目
  • 加载指示器页面在 XPages 中完全刷新

    我的 XPage 之一有很多设计元素 根据连接速度 页面加载时间超出预期 我想创建一个指示器来显示登录用户 页面正在加载 我将其用于部分刷新 效果很好 但我无法使其进行完全刷新 我一直在寻找解决方案 我可以尝试 jquery dojo 或
  • 。 + 选项卡“自动完成”在 Jupyter Notebook 中不起作用

    因此 我似乎无法使用 来自动完成方法 Jupyter Notebook 中的选项卡 目前运行的是 Jupyter 6 0 1 我尝试了以下方法但没有成功 sudo easy install readline conda install c
  • 如何使用 GCC 在 C 上编译库?

    我用这些文件创建了一个库pila h and pila c 我编译文件pila c with gcc pila c c这个库运行良好 我已经测试过了 然后我又做了一个图书馆 这个库有文件pila funciones extra h and
  • idn_to_ascii():INTL_IDNA_VARIANT_2003 已弃用

    我正在为我的网站使用 codeigniter 框架 但在 form validation 中我收到错误 我按照 stackoverflow 中的此链接操作 但它对我不起作用 跟随链接 5 2 17 中的 idn to ascii https
  • Rails:页面加载时间很长

    我有一个 Rails 项目 我在一个控制器中遇到了非常奇怪的事情 浏览器需要大约 3 分钟来加载页面 但 Rails 在日志中写入 Completed 200 OK in 20563ms Views 17144 2ms ActiveReco

随机推荐