一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如:

tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory

原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.

另外一个原因就是已经安装了该共享库, 但执行需要调用该共享库的程序的时候, 程序按照默认共享库路径找不到该共享库文件.

所以安装共享库后要注意共享库路径设置问题, 如下:

1) 如果共享库文件安装到了/lib或/usr/lib目录下, 那么需执行一下ldconfig命令

ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.

2) 如果共享库文件安装到了/usr/local/lib(很多开源的共享库都会安装到该目录下)或其它"非/lib或/usr/lib"目录下, 那么在执行ldconfig命令前, 还要把新共享库目录加入到共享库配置文件/etc/ld.so.conf中, 如下:

# cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig

3) 如果共享库文件安装到了其它"非/lib或/usr/lib" 目录下, 但是又不想在/etc/ld.so.conf中加路径(或者是没有权限加路径). 那可以export一个全局变量LD_LIBRARY_PATH, 然后运行程序的时候就会去这个目录中找共享库.

LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开. 比如安装了一个mysql到/usr/local/mysql目录下, 其中有一大堆库文件在/usr/local/mysql/lib下面, 则可以在.bashrc或.bash_profile或shell里加入以下语句即可:

一般来讲这只是一种临时的解决方案, 在没有权限或临时需要的时候使用.

转自:http://www.douban.com/note/207473567/

转载于:https://www.cnblogs.com/catkins/p/5270601.html

linux动态链接库---一篇讲尽相关推荐

  1. linux视频教程第0讲.开山篇

    linux视频教程第0讲.开山篇 为什么学习linux linux是一个开源.免费的操作系统,其稳定性.安全性.处理多并发已经得到业界的认可,目前很多中型,大型甚至是巨型项目都在使用linux lin ...

  2. 菜鸟学Linux 第090篇笔记 corosync+drbd+mysql

    菜鸟学Linux 第090篇笔记 corosync+drbd+mysql 内容总览 上节回顾 DRBD (Distributed Replicated Block Device) 分布式复制块设备 配 ...

  3. Linux动态链接库的使用

    Linux动态链接库的使用 1.前言 在实际开发过程中,各个模块之间会涉及到一些通用的功能,比如读写文件,查找.排序.为了减少代码的冗余,提高代码的质量,可以将这些通用的部分提取出来,做出公共的模块库 ...

  4. 菜鸟学Linux 第034篇笔记 vmlinuz, initrd, modules, script

    菜鸟学Linux 第034篇笔记  vmlinuz, initrd, modules, script 内核两部分 核心 /boot/vmlinuz-version 内核模块 /lib/modules/ ...

  5. Linux实操篇笔记

    Linux实操篇 远程登陆Linux 先检查一下sshd服务打开没有( " * " 表示打开): setup 选择系统设置,进入下面页面: Xshell 是一个强大的安全终端模拟软 ...

  6. linux动态链接库全局变量共享问题DLL共享数据段

    Linux写时拷贝技术(copy-on-write) 进程间是相互独立的,其实完全可以看成A.B两个进程各自有一份单独的liba.so和libb.so,相应的动态库的代码段和数据段都是各个进程各自有一 ...

  7. Linux动态链接库编程入门

    Linux动态链接库编程入门 转:http://blog.csdn.net/yang_rong_yong/article/details/3090212 动态链接库是一种通用的软件组件技术,是多种操作 ...

  8. 嵌入式 Linux 开发工具篇问题整理//C语言测试(杨辉三角、递归调用实现阶乘、计算器、统计字符串出现次数)//2018.07.12.//

    嵌入式 Linux 开发工具篇问题整理 1. 嵌入式开发与传统开发的区别?(同类问题:单片机开发与嵌入式开发的区别)             是否有无操作系统:     2. 移植操作系统的好处有哪些 ...

  9. linux驱动开发篇(三)—— 总线设备驱动模型

    linux系列目录: linux基础篇(一)--GCC和Makefile编译过程 linux基础篇(二)--静态和动态链接 ARM裸机篇(一)--i.MX6ULL介绍 ARM裸机篇(二)--i.MX6 ...

最新文章

  1. WebMagic之优秀爬虫框架
  2. 请列举你了解的分布式锁_面试官想要你回答的分布式锁实现原理
  3. 编程语言python特点-Python程序特点
  4. html登录界面_php实现登录功能
  5. 动态数组,数组初始化,数组内存释放,向数组中添加一个元素,向数组中添加多个元素,数组打印,顺序查找,二分查找,查找数组并返回地址,冒泡排序,改变数组中某个元素的值,删除一个数值,删除所有,查找含有
  6. [iOS] dom解析xml数据,拿到lt;gt;里面的值
  7. qq安全保护进程更改计算机,分享win10电脑系统关闭qq安全防护进程的步骤
  8. html 分页_MySQL——优化嵌套查询和分页查询
  9. php 中断输出,PHP捕捉异常中断的方法
  10. Oracle中两个重要的语句
  11. win10 安装Pytorch GPU版+CUDA+cuDNN(篇幅较长保姆教程) (含CUDA11.1与cuDNN8.0.4安装包)
  12. python如何初始化对象数组_如何理解Python中的面向对象编程?
  13. FFmpeg解码音频代码
  14. HDU-3466-Proud Merchants
  15. kubernetes视频教程笔记 (26)-集群调度-节点亲和性
  16. CSS圆角兼容IE6
  17. linux最新的发布版本号,求问Linux最新内核版本以及发布日期。
  18. 凸包算法(convex hull)
  19. Android studio 打包 uni App 修改apk名称,app名称及图标
  20. 基于评论的跨境电商产品满意度分析_kaic

热门文章

  1. 飞思卡尔高级驾驶员辅助系统(ADAS)解决方案
  2. NoSQL数据库-MongoDB和Redis
  3. JavaScript是如何工作的:JavaScript的共享传递和按值传递
  4. 一些数据结构的思想(3)
  5. 遇到的问题锦集及解决方案
  6. mysql dba系统学习(10)innodb引擎的redo log日志的原理
  7. codeblocks、wxWidgets环境配置
  8. linux下常用软件下载
  9. 【直播资料下载】Python 系列直播——深入Python与日志服务,玩转大规模数据分析处理实战第二讲...
  10. springMVC之Interceptor拦截器