对于以压缩包发布的软件,在它的目录下通常都有一个配置脚本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,"当指定多个动态库搜索路径时,路径之间用冒号":"分隔)
路径五:默认的动态库搜索路径

最新文章

  1. 表单 - Form - 无刷新提交原理
  2. K3中添加的一条新数据,其在数据库中的位置
  3. Android课程---手机尺寸相关的概念 +尺寸单位+关于颜色
  4. 初学Java9:学习Mybatis时报错:Parameter 'name' not found. Available parameters are [1, 0, param1, param2]
  5. MySQL数据库获取汉字拼音的首字母函数
  6. Python Ogre Blender(转载)
  7. Mybank
  8. C#生成缩略图不清晰模糊问题的解决方案!
  9. gulp前端自动化构建工具新手入门篇
  10. 需要考虑的9个SEO实践
  11. portal安装常见问题
  12. bootstrap学习笔记之基础导航条 http://www.imooc.com/code/3111
  13. (5编译使用最新opencv)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  14. paypal的IPN机制
  15. IDEA设置本地maven仓库
  16. ASP.NET上传文件到远程服务器(HttpWebRequest)
  17. python-文件读写操作
  18. pymongo 使用测试
  19. Pycharm Professional破解(windows,mac)
  20. LOJ2542. 「PKUWC2018」随机游走【概率期望DP+Min-Max容斥(最值反演)】

热门文章

  1. 小程序下载canvas生成图片
  2. iOS-UIStoryboard和UIResponder
  3. 【C/C++开发】运算符重载二
  4. 【C/C++开发】运算符重载
  5. Asp.net SignalR 实现服务端消息实时推送到所有Web端
  6. [LuoguP1155]双栈排序_二分图_bfs
  7. jmeter XLSX 读取
  8. AlgorithmMap Dev Log
  9. git 显示文件改动,但无具体改动信息
  10. 20190621-N皇后