文档章节

Linux系统中如何添加自己的库文件路径

徐学良
 徐学良
发布于 2015/12/24 17:48
字数 995
阅读 43
收藏 8
点赞 0
评论 0

库文件在连接(静态库和共享库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的。一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库搜索路径,所以使用这两个目录中的库时不需要进行设置搜索路径即可直接使用。对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中。设置库文件的搜索路径有下列两种方式,可任选其一使用:

在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径。

在 /etc/ld.so.conf 文件中添加库的搜索路径。

将自己可能存放库文件的路径都加入到/etc/ld.so.conf中是明智的选择

添加方法也极其简单,将库文件的绝对路径直接写进去就OK了,一行一个。例如:

/usr/X11R6/lib

/usr/local/lib

/opt/lib

需要注意的是:第二种搜索路径的设置方式对于程序连接时的库(包括共享库和静态库)的定位已经足够了,但是对于使用了共享库的程序的执行还是不够的。这是因为为了加快程序执行时对共享库的定位速度,避免使用搜索路径查找共享库的低效率,所以是直接读取库列表文件 /etc/ld.so.cache 从中进行搜索的。/etc/ld.so.cache 是一个非文本的数据文件,不能直接编辑,它是根据 /etc/ld.so.conf 中设置的搜索路径由 /sbin/ldconfig 命令将这些搜索路径下的共享库文件集中在一起而生成的(ldconfig 命令要以 root 权限执行)。因此,为了保证程序执行时对库的定位,在 /etc/ld.so.conf 中进行了库搜索路径的设置之后,还必须要运行 /sbin/ldconfig 命令更新 /etc/ld.so.cache 文件之后才可以。ldconfig ,简单的说,它的作用就是将/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache 以供使用。因此当安装完一些库文件,(例如刚安装好glib),或者修改ld.so.conf增加新的库路径后,需要运行一下 /sbin/ldconfig使所有的库文件都被缓存到ld.so.cache中,如果没做,即使库文件明明就在/usr/lib下的,也是不会被使用的,结果编译过程中抱错,缺少xxx库,去查看发现明明就在那放着,搞的想大骂computer蠢猪一个。

在程序连接时,对于库文件(静态库和共享库)的搜索路径,除了上面的设置方式之外,还可以通过 -L 参数显式指定。因为用 -L 设置的路径将被优先搜索,所以在连接的时候通常都会以这种方式直接指定要连接的库的路径。

前面已经说明过了,库搜索路径的设置有两种方式:在环境变量 LD_LIBRARY_PATH 中设置以及在 /etc/ld.so.conf 文件中设置。其中,第二种设置方式需要 root 权限,以改变 /etc/ld.so.conf 文件并执行 /sbin/ldconfig 命令。而且,当系统重新启动后,所有的基于 GTK2 的程序在运行时都将使用新安装的 GTK+ 库。不幸的是,由于 GTK+ 版本的改变,这有时会给应用程序带来兼容性的问题,造成某些程序运行不正常。为了避免出现上面的这些情况,在 GTK+ 及其依赖库的安装过程中对于库的搜索路径的设置将采用第一种方式进行。这种设置方式不需要 root 权限,设置也简单:

$ export LD_LIBRARY_PATH=/opt/gtk/lib:$LD_LIBRARY_PATH

可以用下面的命令查看 LD_LIBRAY_PATH 的设置内容:

$ echo $LD_LIBRARY_PATH

至此,库的两种设置就完成了。


© 著作权归作者所有

共有 人打赏支持
徐学良
粉丝 22
博文 196
码字总数 13841
作品 0
浦东
程序员
Linux 程序设计--读书笔记

1 Linux 程序设计 1.1 Linux shell 登录进 Linux 与 shell 进行交互时, 它像 Windows 中的命令提示窗口一样运行程序. 它在一组指定的目录路径下按照你给出的程序名搜索与之同名的文件. 搜索的...

yuberhu ⋅ 05/06 ⋅ 0

比起 Windows,怎样解读 Linux 的文件系统与目录结构?

原文出处:吕凯 Linux 和Windows的文件系统有些不同,在学习使用 Linux 之前,若能够了解这些不同,会有助于后续学习。 本文先对Windows和 Linux 上面文件系统原理、组织概念进行区分,并给出...

吕凯 ⋅ 06/06 ⋅ 0

linux下编译代码时的默认头文件路径

1 应用编程、驱动源代码中的头文件 1.1 应用编程中包含的头文件是应用层的头文件,是应用程序的编译器带来的 1.1.1 编译windows下的应用程序时 1)使用<>包含的头文件一般会先搜索-I选项后的...

qq_40334837 ⋅ 05/06 ⋅ 0

Python 虚拟环境 Virtualenv 分别在 Windows 和 Linux 上的安装和使用

virtualenv 是用来创建 Python 的虚拟环境的库,虚拟环境能够独立于真实环境存在,并且可以同时有多个互相独立的 Python 虚拟环境,每个虚拟环境都可以营造一个干净的开发环境,对于项目的依...

水手 ⋅ 06/14 ⋅ 0

Linux下so动态库查看与运行时搜索路径的设置

ldd命令 linux 下可以使用ldd查看可执行文件所需要的动态链接库(*.so)。 注:下文用so代替动态链接库文件。 // 举个例子~$ ldd /bin/ls 如果ldd命令没有找到对应的共享库文件和其具体位置?...

chenyulancn ⋅ 04/24 ⋅ 0

Linux上安装二进制文件MySQL详解

Linux上安装二进制文件MySQL详解 前言:昨天晚上搞了很久,终于搞清楚mysql的安装配置了,我真是太low了。当我在云服务器上登进Mysql时,真是高兴哈哈,咱一步一步来,彻底搞懂Mysql的安装配...

xiaocao13140 ⋅ 05/23 ⋅ 0

在 Arch Linux 中给软件包降级

导读 正如你了解的,Arch Linux 是一个滚动版本和 DIY(自己动手)发行版。因此,在经常更新时必须小心,特别是从 AUR 等第三方存储库安装或更新软件包。如果你不知道自己在做什么,那么最终...

问题终结者 ⋅ 06/11 ⋅ 0

Linux开发环境搭建之Intellij Idea安装配置

本文将会在Linux环境下安装使用Intellij Idea开发工具,然后在Idea中配置Maven和Tomcat,如果还没有Maven环境,可以参考《Linux开发环境搭建之Maven安装配置 》一文。 一、环境准备 1.Linxu桌...

MaxBill ⋅ 05/14 ⋅ 0

如何装载/卸载 Linux 内核模块

找到并装载内核模块以解决外设问题。 本文来自 Manning 出版的 Linux in Action 的第 15 章。 Linux 使用内核模块管理硬件外设。 我们来看看它是如何工作的。 运行中的 Linux 内核是您不希望...

20% ⋅ 06/16 ⋅ 0

大数据社区整理的Linux运维笔试面试题(47题)

大数据社区整理的Linux运维笔试面试题(47题) Linux操作系统知识 1. Linux开机启动流程详细步骤是什么?忘记密码如何破解? 2. 企业中Linux数据库服务器做raid几,你们原来公司的数据库服务...

代金券优惠 ⋅ 06/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

两道面试题,带你解析Java类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ static { System.out.println("爷爷在静态代码块"); }} cl...

1527 ⋅ 7分钟前 ⋅ 0

SpringCloud(Data Flow)

dataflow-server

赵-猛 ⋅ 17分钟前 ⋅ 0

深入理解Java虚拟机

这本书我读到第8章,之后就是在读不下去了。 读到后面是一种痛苦的体验,太多的东西是不全面的,大量的专有名词是没有解释的,读到最后很多东西仅仅是一个侧面,所以我觉得,这本书不适合初学...

颖伙虫 ⋅ 23分钟前 ⋅ 0

B树和B+树的总结

B树 为什么要B树 磁盘中有两个机械运动的部分,分别是盘片旋转和磁臂移动。盘片旋转就是我们市面上所提到的多少转每分钟,而磁盘移动则是在盘片旋转到指定位置以后,移动磁臂后开始进行数据的...

浮躁的码农 ⋅ 25分钟前 ⋅ 0

NanoPi NEO core/ Ubuntu16.04单网卡配置3个IP地址(2个静态,1个动态)

配置 root@NanoPi-NEO-Core:/etc/network# cat interfacesauto loiface lo inet loopbackallow-hotplug eth0iface eth0 inet static address 172.31.188.249 netmask 255.......

SamXIAO ⋅ 52分钟前 ⋅ 0

三步为你的App集成LivePhoto功能

摘要:LivePhoto是iOS9新推出的一种拍照方式,类似于拍摄Gif图或录制视频片段生成图片。如果没有画面感,可以联想《哈利波特》霍格沃茨城堡的壁画,哈哈,很炫酷有木有,但坑爹的是只有iphone6S以...

壹峰 ⋅ 今天 ⋅ 0

centos7 git安装

由于centos中的源仓库中git不是最新版本,需要进行源码安装。 1、查看yum仓库git信息 [root@iZm5e3d4r5i5ml889vh6esZ zh]# yum info gitLoaded plugins: fastestmirrorLoading mirror s...

xixingzhe ⋅ 今天 ⋅ 0

input file 重复上传同一张图片失效的解决办法

解决办法 方法一:来回切换input[type='file']的type属性值,可以是‘text’,'button','button'....,然后再切换回来‘file’ 方法二:每次取消图片预览后,重置input[type='file']的value的...

时刻在奔跑 ⋅ 今天 ⋅ 0

Mahout推荐算法API详解

前言 用Mahout来构建推荐系统,是一件既简单又困难的事情。简单是因为Mahout完整地封装了“协同过滤”算法,并实现了并行化,提供非常简单的API接口;困难是因为我们不了解算法细节,很难去根...

xiaomin0322 ⋅ 今天 ⋅ 0

WampServer默认web服务器根目录位置

安装WampServer之后的web服务器根目录默认位置在WampServer安装目录下的www:

临江仙卜算子 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部