我是C的新手。我正在使用Ubuntu 12.04进行编码。我刚刚面对this problem并使用为该问题提供的解决方案(using -lncurses flag while compiling with gcc
)解决了这个问题。
我的问题是,
我们是否必须明确提及我们程序中使用的每个库作为gcc的标志,以便它可以链接到目标文件?
如果我们必须这样做,为什么要在我们的程序顶部编写头文件,例如#include<stdio.h> or
#include`?
我们是否必须维护一些在gcc
命令中写入此库标志的顺序。因为of a statement in this answer说订单很重要?是什么决定了旗帜的顺序?
提前致谢。
答案 0 :(得分:1)
通常,是的。有些库使用名为pkg-config
的脚本来告诉您如何链接;例如pkg-config --libs libzip
将为libzip
提供-lzip -lz
的链接器标记。
标头包含函数的声明,数据结构的定义以及与编译器相关的其他内容,但没有链接器的信息。这是一个历史性的意外;它已在Plan 9 C编译器中修复,我也相信微软的编译器,但不是普通的Unix / Linux编译器。
请注意,标题和库不是一对一的对应关系。例如。一些库是“仅标题”,包括libc在内的一些库有许多标题。在其他情况下,可以使用多个版本的库(通用版本,调试版本,某些处理器的优化版本,......),所有版本都具有相同的标题。
我认为这取决于GCC版本,但我从未弄清楚哪些版本需要严格的订购,哪些版本不需要。安全的赌注是以反向依赖顺序链接库;因此,如果libfoo
使用libbar
,请先与libfoo
相关联,然后libbar
。前面提到的pkg-config
也会为支持它的图书馆负责。