我是靠谱客的博主 笨笨斑马,最近开发中收集的这篇文章主要介绍makefile的链接顺序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1.

你有一个library或者是可执行文件,你可以这样查看他的依赖关系:

  • readelf -d
  • ldd工具


2.查看某个. c文件引用了那些头文件

  gcc -M    :查看引用的全部头文件(包括系统头文件)

 gcc -MM :忽略系统头文件


3.对于library的查找

查找需要连接的符号名是从前向后找---即最后一个-l库文件最先调用;根据-L指定的路径顺序查找;

不同 目录下的同名的库,只取第一个(从左向右:即依次调用,最后一个生效的是最后调用:即最左边的),后面同名库被忽略;

g++ ...  obj($?) -l(上层逻辑lib) -l(中间封装lib) -l(基础lib) -l(系统lib)  -o $@

4:对于符号的查找

从左向右查找,如果是主程序块和静态库,不能定位地址就报错: ‘undefined reference to: xxx’

果是链接成动态库,则假设该符号在load 的时候地址重定位。如果找不到对应的动态库,则会在load的时候报:“undefined symbol: xxx“这样的错误。


5.在项目开发过层中尽量让lib是垂直关系,避免循环依赖;越是底层的库,越是往后面写!

正常情况下lib库是不会依赖其他lib库的,除非是静态库或者其他固定公用的库,否则会出现移植程序的时候出bug;

而强制的依赖关系是显式的写明在Makefile中,使主程序知道lib库是由依赖关系的,而不是平行调用;


6.





最后

以上就是笨笨斑马为你收集整理的makefile的链接顺序的全部内容,希望文章能够帮你解决makefile的链接顺序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部