GNU/Linux中动态库的搜索路径的指定方法汇总

动态链接时、执行时搜索路径顺序:

1.编译目标代码时使用-L指定的动态库搜索路径;

2.环境变量LD_LIBRARY_PATH指定的动态库搜索路径;

3.配置文件/etc/ld.so.conf中指定的动态库搜索路径;

4.默认的动态库搜索路径/lib;

5.默认的动态库搜索路径/usr/lib。

以上的3~5步中,不再需要手动地指定动态库搜索路径了,

有一个可以进行配置更新默认的搜索路径的命令:

ldconfig

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

例如:

我编译了个动态库文件,copy到/usr/lib下,这时使用ldconfig搜索一下我复制过去的库是否已经在能够配置成功;

返回栏目页:http://www.bianceng.cnhttp://www.bianceng.cn/OS/Linux/

root@ubuntu:/home/v0id/tools/android-ndk-r9c/samples/hello-jni# cp libs/x86/libhello-jni.so /usr/lib

root@ubuntu:/home/v0id/test# ldconfig -p | grep jni

无任何返回结果;

使用ldconfig命令进行配置后:

root@ubuntu:/home/v0id/test# ldconfig  /usr/lib

root@ubuntu:/home/v0id/test# ldconfig -p | grep jni

root@ubuntu:/home/v0id/test# ldconfig -p | grep jni

libhello-jni.so (ELF) => /usr/lib/libhello-jni.so

例子2:

不在默认目录下,/etc/ld.so.conf文件中的内容为:

include /etc/ld.so.conf.d/*.conf

那么在/etc/ld.so.conf.d/建立一个yygytest.conf文件,配置库的新路径,内容如下:

/home/v0id/test/yygylib

同时把放在/usr/lib目录下的libhello-jni.so动态库移动到/home/v0id/test/yygylib目录下,再使用ldconfig更新动态库路径的配置,命令如下:

root@ubuntu:/etc/ld.so.conf.d# mv /usr/lib/libhello-jni.so /home/v0id/test/yygylib/

root@ubuntu:/etc/ld.so.conf.d# ldconfig -p | grep jni

libhello-jni.so (ELF) => /usr/lib/libhello-jni.so

root@ubuntu:/etc/ld.so.conf.d# ldconfig

root@ubuntu:/etc/ld.so.conf.d# ldconfig -p | grep jni

libhello-jni.so (ELF) => /home/v0id/test/yygylib/libhello-jni.so

当一个动态库文件从目录中删除时,再次使用ldconfig即可更新动态库的路径的配置:_(

作者:csdn博客 yygydjkthh

时间: 2024-07-30 00:16:09

GNU/Linux中动态库的搜索路径的指定方法汇总的相关文章

linux gcc 编译时头文件和库文件搜索路径

一.头文件    gcc 在编译时寻找所需要的头文件 :    ※搜寻会从-I开始    ※然后找gcc的环境变量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH    ※再找内定目录   /usr/include   /usr/local/include   /usr/lib/gcc-lib/i386-linux/2.95.2/include   /usr/lib/gcc-lib/i386-linux/2.95.2/../../../..

Linux系统中“动态库”和“静态库”那点事儿【转】

转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情.       在Linux操作系统中,普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式.ELF(Executable and Linking Format,可执行连接格式)是UNIX系统实验室(USL)作为应

关于linux使用动态库进行进程间通讯

问题描述 关于linux使用动态库进行进程间通讯 各位: 两个进程间通过动态库的方式如何进行参数的传递? 我首先在一个库中做了如下的内容: #include ""caculate.h""#include ""stdio.h""int iShare; #pragma data_seg (""shareddate"")int iShareInSeg = 1;#pragma data_seg#

[c/c++]关于linux下动态库/静态库的基础问题

问题描述 [c/c++]关于linux下动态库/静态库的基础问题 本人小白,自学没多久,有几个问题一直没搞太明白,望高手解答! 假如我写了一个动态库libmylib.so(我有函数声明mylib.h),里面用到了A同学写的动态库liba.so(我有声明a.h),现在我要在一个新的程序test.cpp里调用我写的mylib.so 问题: 1.test.cpp的头文件需要两个.h都包含还是只要mylib.h? 2.用g++链接时 -lmylib -la都需要吗? 3.假如有一天liba.so文件丢失

linux 链接动态库时产生如下错误

问题描述 linux 链接动态库时产生如下错误 g++ ADS_APIServer.o ../../udt/src/libudt.so ../Commlib/libCommlib.so libADS_APIServer.so -o ADS_APIServer ADS_APIServer.o: In function soapOpenThread(void*)': ADS_APIServer.cpp:(.text+0x8b0): undefined reference topthread_crea

linux中更改MySQL数据库存储路径和端口

linux中更改MySQL数据库存储路径和端口 假设我们以更改到/opt/data目录下为倒: 1.opt目录下建立data目录 mkdir /opt/data 2.停掉MySQL服务进程 mysqladmin -u root -p shutdown 3.把/var/lib/mysql整个目录移到/opt/data mv /var/lib/mysql /opt/data/ 这样就把MySQL的数据文档移动到了/opt/data/mysql下 . 4.my.cnf文档配置 默认安装时my.cnf在

Dreamweaver MX 动态建站数据库路径的使用方法

dreamweaver|动态|数据|数据库 一,不推荐使用Server.Mappath(相对文档路径地址的数据库文件) 虽然具有平台移植性,但对于不同层次,不同深度下的引用该数据库的文件,将不能完整地保证数据库路径的正确性. 举个例子: 1,数据库文件cnbruce.mdb,所在文件夹database(可http访问)2,DW自动生成的连接数据库文件conn.asp,所在文件夹Connections3,如果在DW中测试连接路径成功,则必须输入地址为Server.Mappath("../datab

在Linux中通过Python脚本访问mdb数据库的方法

  这篇文章主要介绍了在Linux中通过Python脚本访问mdb数据库的方法,本文示例基于debian系的Linux系统,需要的朋友可以参考下 在 linux 系统中连接 mdb 数据库,直接连接的话,mdb 默认的驱动无法识别非 windows 的路径, 所以不能使用常规的连接方式 ? 1 DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:dirfile.mdb 安装 这里我们需要借助一些库来实现第三方的驱动 我们需要安装这些包:mdbtools,

jquery中一个方法中动态生成的标签可以被其它方法调用吗

问题描述 jquery中一个方法中动态生成的标签可以被其它方法调用吗 解决方案 在控制台中动态引入jquery的方法jquery几个按钮同时调用一个方法 解决方案二: 可以,就根据div的id或者class找到他,$("#xxxx") 解决方案三: 你应该取得添加的那个JS对象 var dd = $('#attr_info').append(......) 然后再$(dd).eq(..).keyup 解决方案四: 看你代码append是动态添加的item吧..这样你的ajax都没添加到