程序在 linux 下默认在/lib和/usr/lib目录下查找库,也可以通过ln建立软连接

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

1、在 /etc/ld.so.conf 文件中添加库的搜索路径。(或在/etc/ld.so.conf.d 下新建一个.conf文件,将搜索路径一行一个加入-junziyang)

将存放库文件的路径都加入到/etc /ld.so.conf中是明智的选择添加方法也极其简单,将库文件的绝对路径直接写进去

/usr/local/lib
/opt/MVS/lib

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

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

交叉编译时候如何配置连接库的搜索路径

交叉编译的时候不能使用本地(i686机器,即PC机器,研发机器)机器上的库,但是在做编译链接的时候默认的是使用本地库,即/usr/lib, /lib两个目录。因此,在交叉编译的时候,要采取一些方法使得在编译链接的时候找到需要的库。

1、交叉编译时候直接使用-L和-I参数指定搜索非标准的库文档和头文档的路径。例如:

arm-linux-gcc  test.c  -L /usr/local/arm/lib  -I /usr/local/include

2、使用ld.so.conf文档,将用到的库所在文档目录添加到此文档中,然后使用ldconfig命令刷新缓存

或者用

export  LD_LIBRARY_PATH=$LD_LIBRARY_PATH: /usr/local/arm/lib

linux下关于动态库的知识

1. 静态库和动态库的基本概念

静态库,是在可执行程序连接时就已经加入到执行码中,在物理上成为执行程序的一部分;使用静态库编译的程序运行时无需该库文件支持,哪里都可以用,但是生成的可执行文件较大。

动态库,是在可执行程序启动时加载到执行程序中,可以被多个可执行程序共享使用。使用动态库编译生成的程序相对较小,但运行时需要库文件支持,如果机器里没有这些库文件就不能运行。

2. 如何使用动态库

如何程序在连接时使用了共享库,就必须在运行的时候能够找到共享库的位置。linux的可执行程序在执行的时候默认是先搜索/lib和/usr/lib这两个目录,然后按照/etc/ld.so.conf里面的配置搜索绝对路径。

同时,Linux也提供了环境变量LD_LIBRARY_PATH供用户选择使用,用户可以通过设定它来查找除默认路径之外的其他路径,如查找/work/lib路径,你可以在/etc/rc.d/rc.local或其他系统启动后即可执行到的脚本添加如下语句:LD_LIBRARY_PATH =/work/lib:$(LD_LIBRARY_PATH)。并且LD_LIBRARY_PATH路径优先于系统默认路径之前查找。

不过LD_LIBRARY_PATH的设定作用是全局的,过多的使用可能会影响到其他应用程序的运行,所以多用在调试。通常情况下推荐还是使用gcc的-R或-rpath选项来在编译时就指定库的查找路径,并且该库的路径信息保存在可执行文件中,运行时它会直接到该路径查找库,避免了使用LD_LIBRARY_PATH环境变量查找。

3.库的链接时路径和运行时路径

现代链接器在处理动态库时将链接时路径(Link-time path)和运行时路径(Run-time path)分开,用户可以通过-L指定连接时库的路径,通过-R(或-rpath)指定程序运行时库的路径,大大提高了库应用的灵活性。比如我们做嵌入式移植时:

arm-linux-gcc $(CFLAGS) –o target –L /work/lib/zlib/ -llibz

(work/lib/zlib下是交叉编译好的zlib库),将target编译好后我们只要把zlib库拷贝到开发板的系统默认路径下即可。或者通过- rpath(或-R )、LD_LIBRARY_PATH指定查找路径。

linux 添加动态链接库的方法相关推荐

  1. 自己工作用到的 linux添加路由的方法

    linux下添加路由的方法 一.查看及添加临时路由 1.查看路由(linux下) [root@nfs ~]# route #同netstat -rn Kernel IP routing table D ...

  2. linux添加永久路由方法,Linux添加永久静态路由的方法

    Linux添加永久静态路由的方法 一.使用 route 命令添加使用route 命令添加的路由,机器重启或者网卡重启后路由就失效了,方法:A.添加到主机的路由# route add –host 192 ...

  3. linux 添加动态链接库路径

    1 2 export LD_LIBRARY_PATH=你的库的路径:$LD_LIBRARY_PATH echo $LD_LIBRARY_PATH linux 默认回去/lib和/usr/lib目录下查 ...

  4. linux下添加路由的方法

    Linux中增加软路由的两种方法 第一种: route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.2.254 dev eth0 /* 增加 ...

  5. linux下添加自动启动项,linux 开机自动启动脚本方法

    #service servicename status是当前状态 #chkconfig --list servicename是查看启动状态,也就是是否开机自动启动 首先写好脚本,如 mysql,把它放 ...

  6. linux 添加最大串口数量方法

    很多 linux 安装好后只有可以看到 4 个或 8 个串口,比如:OS 默认串口数量Red hat 9.0 4Ubuntu 9.10/10.4 4SUSE 11 8如 SUSE11 可以看到,8 个 ...

  7. liunx创建php环境变量,linux添加环境变量的方法总结

    linux添加环境变量的方法总结 linux对环境变量有无双引号.或者变量用不用{}括起来并不敏感,小小的看了下profile文件,似乎系统如果发现变量没有引号,会自动加上. 但变量前必须加$符号,类 ...

  8. linux添加了一条静态路由,为Linux新增静态路由的方法

    为Linux新增静态路由的方法 静态路由是用户手工配置的路由信息,起到保护网络安全的作用,那么要如何为Linux系统新增一条静态路由呢?下面YJBYS小编就给大家介绍下Linux新增静态路由器的方法. ...

  9. linux 添加开机启动项的三种方法。

    原文地址: https://blog.csdn.net/lylload/article/details/79488968 Shell环境变量配置文件:https://blog.csdn.net/yzs ...

最新文章

  1. Docker使用笔记
  2. 怎么用feign远程调用别人的接口_spring cloud-openFeign声明式远程调用
  3. jQuery .attr(checked)得undefined 问题解决
  4. spss主成分综合得分_【SPSS因子分析】在SPSS中对医学多个数值变量进行因子分析 —【杏花开医学统计】...
  5. iOS9 判断微信qq是否安装
  6. php mysql 性能测试工具下载_MySQL压力测试工具_MySQL
  7. GitHub还是GitLab?谈谈两者的区别
  8. 文本处理工具--正则表达式
  9. 计算机软件编程英语词汇集锦
  10. php源码 辅助发卡_PHP个人发卡平台源码|自动发货网站源码 V5免授权版
  11. 通过Jquery实现文本高亮及取消高亮
  12. nmn与线粒体的作用,nmn线粒体对细胞作用及影响,值得关注
  13. 本地打印后台处理程序服务没有运行
  14. jq 获取本地ip地址
  15. 英语计算机演讲,计算机英语小演讲 原创
  16. mybatis在关联映射中,引入外部xml文件中定义的对象
  17. VUE2中provide 和 inject用法,以及怎么做响应式数据?
  18. 女子眉纤,额下现一弯新月;男儿气壮,胸中吐万丈长虹
  19. APP界面设计规范一(ios版)
  20. webpack 打包错误

热门文章

  1. 百度网盘真实地址解析(告别下载百度网盘)
  2. vector 通俗易懂描述
  3. 【Matlab】input 请求用户输入
  4. 白菜u盘安装linux,使用U盘安装ubuntu 12.04(使用大白菜u盘启动工具)
  5. 排列组合算法(全排列、全组合)
  6. 亚马逊html邮件,创建电子邮件模板 - Amazon Pinpoint
  7. C# Revit二次开发基础/核心编程---建筑建模-标高和轴网
  8. 台式电脑如何设置此计算机,台式电脑怎么设置无线网络
  9. echarts折线图设置圆点_echarts 设置折线图单个数据小圆圈样式
  10. 命名管道的数据通信代码