编译代码相关
关于gcc/g++链接库的顺序
为什么gcc/g++编译链接静态库,会有顺序问题呢? 比如: a静态库 依赖 b静态库提供的接口函数。 gcc liba.a libb.a 可以编译 gcc libb.a liba.a 编译错误
依赖库只扫描一遍,没找的的符号会在后面的库中继续找,最后找不到就会报未定义的引用错误
折腾gcc/g++连接时.o文件及库的顺序问题 在项目开发过层中尽可能让lib是垂直关系,避免循环依赖;越是底层的库,越是日后面写! 例如:
g++ ... obj($?) -l(上层逻辑lib) -l(中间封装lib) -l(基础lib) -l(系统lib) -o $@
解决办法
- 调整顺序
- 写两遍依赖库
gcc libb.a liba.a libb.a liba.a,循环依赖的时候,静态库可以 - 编译器有个参数 Xlinker 还有其他 ??