未定义的对另一个lib的功能的引用

时间:2017-03-07 07:26:01

标签: c gcc linker

是的,我知道之前有很多人问过这个问题,但我仍然无法理解我的问题

我有2个库,让我们说liba& libb。 libb使用liba但是在.a中编译,所以它应该在编译时链接。 我有以下GCC命令:

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

但是海湾合作委员会正在给我回复很多"未定义的参考..."从libb函数到liba函数。

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

谢谢

1 个答案:

答案 0 :(得分:4)

评估>>Error while fetching pageviews From GA Google.Apis.Requests.RequestError >>Quota Error: profileId ga:****** has exceeded the daily request limit. [403] >>Errors [ >> Message[Quota Error: profileId ga:****** has exceeded the daily request >>>limit.] Location[ - ] Reason[dailyLimitExceeded] Domain[global] >>] 编译命令的命令非常重要。

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

下一步是浏览图书馆。搜索每个库,并将每个库中满足未定义引用的.o元素添加到目标二进制文件中。这总能解决一些问题。但是,它可能还有其他要求。因此,添加库的一部分可能会增加要满足的所需元素。

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

如果.o文件也需要库的相同部分,则有可能在从.o删除代码时删除此问题(删除拉入库部分的机制)。