redjade 发表于 2011-02-22 14:50

链接了重复的lib,为什么不会报重复定义错误?

有个问题一直很困惑。所在的项目有很多个小模块,每个模块的文件都被编译成一个.o 。所有模块的所有.o文件被打包成all.a

然后每个模块有各自的测试模块,生成可执行文件时需要链接该模块的所有.o,以及,all.a文件

我不明白的是,all.a已经包含了所有.o,为什么没有报重复定义。

这个问题我一直没细研究,直到最近编某个模块的测试模块时爆发了这个问题。但是其它模块还是没有这个问题。

有谁知道怎么回事吗? 谢谢

UniqueAccount 发表于 2011-02-28 08:30

重复定义只在编译时报错吧。如果链接时先链接了所有.o文件,再用-lall方式链接你的库文件,这时候是不会再去找库里面的符号了,因为在前面的.o里面已经找到了所有的符号

flw2 发表于 2011-02-28 17:37

重复定义就是链接时候的事情,编译只是针对一个.o
库文件只用于查找未定义的符号,就像LS说的那样

cjaizss 发表于 2011-03-01 13:51

因为有个优先选择啊,到最后找不到的符号再去库里面找
页: [1]
查看完整版本: 链接了重复的lib,为什么不会报重复定义错误?