Linux下的库文件搜索路径
对于以压缩包发布的软件,在它的目录下通常都有一个配置脚本configure,它的作用确定编译参数(比如头文件位置、连接库位置等),然后生成Makefile以编译程序。可以进入该软件的目录,执行"./configure --help"命令查看使用帮。
一个程序能正确编译、链接、运行需要满足3个条件:预处理时能找到头文件,连接时能找到库(静态库或动态库),运行时能找到库。下面介绍库文件的搜索路径 :
编译的时候:
gcc最先搜索-L参数指定的路径--->gcc的环境变量LIBRARY_PATH设置的路径--->内定目录 /lib /usr/lib /usr/local/lib 这是当初compile gcc时写在程序内的
1.“-L”指定连接时库的搜索路径,这些库使用"-l"来显示指定,比如"-labc"表示的库文件为libabc.so
2."-rpath-link"比"-L"多一项功能,它指定的目录还可以用于搜索依赖库。
3."-rpath"比"-rpath-link"多一项功能,它指定的目录会被编译进程序中,当程序运行时,首先从这些目录中寻找库。
怎样指定"-rpath-link"呢?连接器arm-linux-ld通常是由arm-linux-gcc间接启动的,而arm-linux-gcc并不认识"-rpath-link"选项,所以需要在前面加上关键字"-Wl",表示选项用于连接器。在执行配置命令configure之前设置LDFLAGS即可,比如:
export LDFLAGS="-Wl,-rpath-link-Wl,/work/crossbuild/X/lib -Wl,-rpath-link-Wl,/work/corssbuild/GTK/lib"
./configure
运行的时候(搜索动态链接库):
路径一:编译时使用"-rpath"指定目录。
路径二:在配置文件/etc/ld.so.conf中指定动态库搜索路径
路径三:通过环境变量LD_LIBRARY_PATH指定动态库搜索路径(当通过该环境变量指定多个动态库搜索路径时,路径之间用冒号":"分隔)
路径四:在编译目标代码时指定该程序的动态库搜索路径(编译时,通过gcc 的参数"-Wl,-rpath,"当指定多个动态库搜索路径时,路径之间用冒号":"分隔)
路径五:默认的动态库搜索路径
最新文章
- 表单 - Form - 无刷新提交原理
- K3中添加的一条新数据,其在数据库中的位置
- Android课程---手机尺寸相关的概念 +尺寸单位+关于颜色
- 初学Java9:学习Mybatis时报错:Parameter 'name' not found. Available parameters are [1, 0, param1, param2]
- MySQL数据库获取汉字拼音的首字母函数
- Python Ogre Blender(转载)
- Mybank
- C#生成缩略图不清晰模糊问题的解决方案!
- gulp前端自动化构建工具新手入门篇
- 需要考虑的9个SEO实践
- portal安装常见问题
- bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
- (5编译使用最新opencv)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
- paypal的IPN机制
- IDEA设置本地maven仓库
- ASP.NET上传文件到远程服务器(HttpWebRequest)
- python-文件读写操作
- pymongo 使用测试
- Pycharm Professional破解(windows,mac)
- LOJ2542. 「PKUWC2018」随机游走【概率期望DP+Min-Max容斥(最值反演)】