当前位置: 首页 > news >正文

解决linux下程序运行时无法找到动态库的问题error while loading shared libraries

当编译完成的程序依赖某些第三方库时,没配置之前运行程序会报error while loading shared libraries的错误。

实验环境为redhat6.9,假设第三方库存在/home/test/mylib(此路径下不存在子级目录,直接存放.so文件)下。

解决此问题的方法主要有三种:

1. 直接将库文件放入系统默认搜索路径下

系统在进行链接的时候分别从默认路径和用户指定的路径搜索依赖库,默认的搜索路径有"/lib/","/lib64/","/usr/lib"和"/usr/lib64",前面两个是系统用的,最好不要向其中添加别的库文件,后面两个是给用户使用的,安装的应用程序的依赖库就是放到这两个文件夹下边的。

所以我们将/home/test/mylib/下的所有文件拷贝到"/usr/lib"或"/usr/lib64"下,注意不要拷贝文件夹,直接拷贝裸文件。拷贝完毕后即可运行程序。

2. 新建依赖库配置文件

在系统的"/etc/ld.so.conf.d"目录下存放着依赖库的配置文件,首先我们新建一个名字为mylib.conf(名称可随意设置,只要与目录下其他文件不重复即可)的文件,并将依赖库的路径写入。如果出现权限问题,需要切换到root用户下执行。

#进入目录
cd /etc/ld.so.conf.d/

#创建新文件并写入内容               
echo "/home/test/mylib/" > mylib.conf

然后刷新配置文件,输入如下指令:

ldconfig

3. 使用LD_LIBRARY_PATH环境变量

LD_LIBRARY_PATH环境变量保存了依赖库的路径,只需要将我们需要用到的库路径追加到此环境变量下就行了。

这里还分为两种类型:

3.1 一次性配置

在终端中输入如下指令:

#格式:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[依赖库路径]

#例如:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/test/mylib

然后就可以正常运行程序,但是这种方式只在此终端内有效,关闭了此终端,重新打开一个终端后仍然需要重新设置。

3.2 永久配置

编辑当前用户家目录("/home/用户名",此处为"/home/test/")下的.bashrc文件,加入3.1中所述的语句。

cd /home/test/
vim .bashrc

#在最后加入如下语句
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/test/mylib

然后刷新环境变量

source .bashrc

上述操作完成之后即可正常运行程序。

相关文章:

  • Qt样式表的使用setStyleSheet
  • Qt实现关闭主/父窗口后同时关闭其他窗口的方法事件过滤器(eventFilter)的使用
  • StartUML4.0.1的使用方法
  • 结构型模式--Proxy代理模式
  • C++的Lambda表达式的用法
  • 微信小程序学习之rich-text的嵌入静态HTML
  • 微信小程序CSS Flexbox(弹性盒子)布局模块
  • 语义化版本 2.0.0 -- 如何使用软件版本号
  • 微信小程序css之盒子(box)模型
  • 微信小程序中text标签换行问题
  • 微信小程序无法找到组件的问题 [“usingComponents“][“component1“]:“xxx“未找到
  • git本地仓库新建分支并推送到远端仓库
  • 微信小程序将组件中的文字放置在正中间的方法
  • linux脚本开头的#!/bin/bash有什么作用
  • git如何撤销未提交的更改
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • Apache Spark Streaming 使用实例
  • Effective Java 笔记(一)
  • Go 语言编译器的 //go: 详解
  • JS题目及答案整理
  • Nodejs和JavaWeb协助开发
  • python docx文档转html页面
  • Ruby 2.x 源代码分析:扩展 概述
  • SpingCloudBus整合RabbitMQ
  • 百度地图API标注+时间轴组件
  • 从0到1:PostCSS 插件开发最佳实践
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 你真的知道 == 和 equals 的区别吗?
  • 容器服务kubernetes弹性伸缩高级用法
  • 学习笔记TF060:图像语音结合,看图说话
  • linux 淘宝开源监控工具tsar
  • PostgreSQL之连接数修改
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • # 透过事物看本质的能力怎么培养?
  • #QT(智能家居界面-界面切换)
  • #控制台大学课堂点名问题_课堂随机点名
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (rabbitmq的高级特性)消息可靠性
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (转)LINQ之路
  • .Net7 环境安装配置
  • @EnableWebMvc介绍和使用详细demo
  • [ solr入门 ] - 利用solrJ进行检索
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [APIO2012] 派遣 dispatching
  • [AutoSAR 存储] 汽车智能座舱的存储需求
  • [C++]类和对象【上篇】
  • [C++基础]-初识模板
  • [dfs搜索寻找矩阵中最长递减序列]魔法森林的秘密路径