问一个编译工程时出现的问题

uusunny 2008-12-23 12:27:30
有一个工程,编译时进入的第一个makefile里定义了该工程编译后的库的列表
如(为方便起见我省略了路径名)
LIB =
A.a \
B.a \
C.a \
D.a \
...
其中库C中的一个函数funC()用到了库A中的函数funA(),并在源文件中用extern进行了申明,可是链接的时候却提示没法找到funA.o,而如果我把LIB改为如下的样子则链接正常
LIB =
A.a \
B.a \
C.a \
D.a \
A.a \
...

对makefile不熟,想问一下这里边是否有什么顺序要求,一个工程具体的链接顺序是怎么样的(GNU的编译器)
谢谢
...全文
122 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
derek02 2008-12-23
  • 打赏
  • 举报
回复
up
nullah 2008-12-23
  • 打赏
  • 举报
回复
up
nullah 2008-12-23
  • 打赏
  • 举报
回复
up
ooily 2008-12-23
  • 打赏
  • 举报
回复
友情up
lbh2001 2008-12-23
  • 打赏
  • 举报
回复
GCC在链接过程中,对参数中的库的顺序是有要求的,参数右侧的库会先于左侧的库加载,也就是说参数的解析是从右往左的。

假设库B依赖与库A,则链接的时候要写为:
gcc -o bin B A
如果写为:
gcc -o bin A B
则在B中引用的A中的内容就会无法链接通过。

但好像新版本的GCC没有此限制
lifengjiangol 2008-12-23
  • 打赏
  • 举报
回复
up
fox000002 2008-12-23
  • 打赏
  • 举报
回复
不知用的什么版本 gcc

新版本是不需要注意先后顺序的

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧