2017-03-07 57 views
3

功能是啊,我知道很多人问过这个问题,但我仍然无法理解我的情况未定义参考的另一个LIB

我有2个库的问题,比方说,力霸& libb。 libb使用liba但在.a中编译,所以它应该在编译时链接。 我有以下GCC命令:

gcc -o my_program obj/mymain.o obj/myutils.o liba/liba.a libb/libb.a -Iinclude -Iliba -Ilibb 

但GCC将返回我很多的“未定义的参考......”从libb功能力霸功能。

发生了什么事?我该怎么办?

谢谢

+0

您可以显示代码中包含一个库的代码吗?整个错误信息? – Marievi

+4

订单事宜。如果库B依赖于库A,那么B需要在命令行的* A之前*。 –

+0

关于'-I',使用的目的是因为我在这些目录中有标题,所以我想这是好的。 事实上,这是一个ordre问题,因为@Someprogrammerdude指出....感谢您的帮助 –

回答

3

命令在link编译命令的评价是非常重要的。

当编译器看到.o文件时,它们会自动添加到目标二进制文件,因此所有的.o文件都存在。这留下了需要找到的未定义实体的列表。

下一个阶段是通过图书馆。每个库都被搜索,并且每个库的满足未定义参考的.o元素被添加到目标二进制文件中。这总能解决一些问题。但是,它也可能有更多的要求。因此添加库的一部分可能会添加到需要满足的元素。

当一个库需要另一个库时,需要在需要的库之后以及满足其需求的库之前指定它。

如果.o文件也需要库的相同部分,那么当从.o中删除代码(删除引入库部分的机制)时会出现此问题。