linux下,一些关于动态库的问题:

程序运行是加载动态库的几种方法:

第一种,通过ldconfig命令
    ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令它,ldconfig命令通常在系统启动时运行,而当一个用户安装我新的动态库时,就需要手工运行这个命令。ldconfig命令的用途, 主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下, 搜索出可共享的动态链接库(格式如lib*.so*), 进而创建出动态装入程序(ld.so)所需的连接和缓存文件. 缓存文件默认为/etc/ld.so.cache, 此文件保存已排好序的动态链接库名字列表.
    这里面涉及到的关键内容有命令:ldconfig,配置文件目录:/etc/ld.so.conf.d,配置文件在/etc/ld.so.conf内容由用户编辑,缓冲文件/etc/ld.so.cache。

第二种,通过LD_LIBRARY_PATH环境变量
可以通过在.bashrc或者.cshrc中配置该环境变量,LD_LIBRARY_PATH的意思是告诉loader在哪些目录中可以找到共享库. 可以设置多个搜索目录, 这些目录之间用冒号分隔开.

第三种,通过编译选项-Wl, -rpath指定动态搜索的路径
-Wl选项告诉编译器将后面的参数传递给链接器。

当我们要想加入一个动态库时,可以在 /etc/ld.so.conf.d/ 目录下建一个*.conf文件(为什么在这里面建呢,因为吧,/etc/ld.so.conf 文件中已经包含了这一路径,你可以打开看看哦, include /etc/ld.so.conf.d/*.conf)。当然也在其它目录下建立*.conf文件,不过建完以后记得在 /etc/ld.so.conf 文件中加入目录。

还可以在变量LD_LIBRARY_PATH 中,加入动态库目录,我一般都会在 ~/.bashrc 中写入。

参考文献:

http://blog.csdn.net/apn172/article/details/8868968

http://www.linuxidc.com/Linux/2015-07/120192.htm

时间: 2024-08-07 00:12:55

linux下,一些关于动态库的问题:的相关文章

Linux下如何解决动态库的链接问题

关于动态库和静态库,这里不多解释,如何创建属于自己的动态库和静态库,之前有提过,详细内容戳链接. 静态库是一种以空间换取时间和移植性的做法,一些情况下确实有着一定的意义,但是一些情况下,我们自己编写的简单项目,在绝大多数的机器上不存在移植性问题,是没有必要采用静态编译的.而且,在一些大型项目中,我们很难避免去使用到开源库,举个例子,如果我们只是单纯引用了mysql数据库的几个接口,有必要将整个mysql源文件全部编译吗?代价未免太大.通常的做法,是将mysql的include 和lib目录打包之

libpomelo2在linux下编译android动态库libjpomelo

参考文章如下: http://nodejs.netease.com/topic/540702e0898634292cd0a588 https://github.com/NetEase/libpomelo2 编译libjpomelo.so耗费了2天多的时间,资料很少,期间走了很多弯路,这里记录下. 1.官网下载libpomelo2源代码. 2.准备android ndk 10的包,我ubuntu是32位的,所以下载的是android-ndk32-r10b-linux-x86.tar.bz2    

linux下的静态连接库和动态链接库

对linux的静态连接库和动态链接库分不清楚,在看了一篇博文后,现在想做个自己的总结,以加深印象: 1.库的基本概念: 库是可执行代码的二进制形式,其可以被调入操作系统调入内存进行执行. 在window和linux系统,都存在各自的库,但是两种系统的库并不能兼容,因为它们的编译器,连接器,汇编器都是不相同的. 在windows下,静态连接库的后缀是.lib;动态链接库的后缀是.dll 在linux系统下,静态链接库的后缀是.a;动态链接库的后缀是.so 2.静态连接库和动态链接库的命名: 静态连

linux下编译安装boost库

转载:http://www.cnblogs.com/oloroso/p/4632848.html linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4.安装boost库到指定目录 5.测试一下 代码 编译运行 先看一下系统环境 Linux o-pc 3.19.0-22-generic #22-Ubuntu SMP Tue Jun 16 17:15:15

转载: linux下创建svn代码库

linux下创建svn代码库 1.安装svn客户端 2.创建svn代码库 1.安装svn客户端 1.1.使用命令安装 1)CentOS $ yum install subversion 2)ubuntu sudo apt-get install subversion 1.2.源码安装 http://www.cnblogs.com/fengbohello/p/4142810.html 2.开启svn服务进程 2.1.我的习惯是把代码仓库放在/opt/svn目录下,所以先创建目录/opt/svn $

linux应用开发-设计动态库

linux应用开发-设计动态库 一 制作动态库 1. gcc –c mylib.c –o mylib.o 2. gcc -shared -fPIC mylib.o -o libmylib.so  3. 将制作好的libmylib.so 复制到/usr/lib 4 -fpic 使输出的对象模块是按照可重定位地址方式生成 5 -shared 指明产生动态链接库. 二 基本概念见上一章设计静态库

Golang调用windows下的dll动态库中的函数

Golang调用windows下的dll动态库中的函数 https://blog.csdn.net/xuduorui/article/details/78943331 原文地址:https://www.cnblogs.com/yuanjiangw/p/12196004.html

Ubuntu linux设置从当前目录下加载动态库so文件

linux的excutable在执行的时候缺省是先搜索/lib和/usr/lib这两个目录,然后按照ld.so.conf里面的配置搜索绝对路径,linux缺省是不会在当前目录搜索动态库的.windows加载动态库的时候,缺省是首先加载本地目录下的动态库,然后再搜索windows/system和windows/system32目录. windows的动态库搜索顺序,虽然有可能会造成潜在的混乱,但是对于开发和测试无疑是比较方便的,尤其是debug和release版本的动态库需要经常切换进行测试的时候

关于linux下GCC生成共享库(动态链接库)的探究

下面列出了我在对共享库(动态链接库)编写以及使用时遇到的几个简单问题进行探究和解答: 参考文档:http://www.cnblogs.com/likwo/archive/2012/05/09/2492225.html 1.静态库.动态链接库.共享库有什么区别? 静态库(windows下为.lib,linux下为.a)是在程序编写前就编译到目标程序中了,而动态链接库(windows下为.dll)可以在程序执行的任何时候被动态加载.共享库(linux下为.so)是在程序启动的时候加载到程序中. 1)

linux 下C语言编程库文件处理与Makefile编写

做开发快3年了,在linux下编译安装软件算是家常便饭了.就拿gcc来说,都有不下10次了,可基本每次都会碰到些奇奇怪怪的问题.看来还是像vs.codeblocks这样的ide把人弄蠢了.便下定决心一定要好好学习下如何在linux下纯手工gcc编译c项目.今天学了2点,一个是库文件处理,另一个是makefile编写. 学习的系统是centos6.6,编译升级的gcc4.8.2,明天写个博客总结下这回gcc安装的过程,每次都能学到些东西. gcc的编译过程 首先需要清楚gcc编译做了些什么 源文件