用于构建程序的每个库是否需要使用gcc中的标志进行链接?

时间:2013-08-22 13:12:32

标签: c gcc header-files

我是C的新手。我正在使用Ubuntu 12.04进行编码。我刚刚面对this problem并使用为该问题提供的解决方案(using -lncurses flag while compiling with gcc)解决了这个问题。

我的问题是,

  1. 我们是否必须明确提及我们程序中使用的每个库作为gcc的标志,以便它可以链接到目标文件?

  2. 如果我们必须这样做,为什么要在我们的程序顶部编写头文件,例如#include<stdio.h> or #include`?

  3. 我们是否必须维护一些在gcc命令中写入此库标志的顺序。因为of a statement in this answer说订单很重要?是什么决定了旗帜的顺序?

  4. 提前致谢。

1 个答案:

答案 0 :(得分:1)

  1. 通常,是的。有些库使用名为pkg-config的脚本来告诉您如何链接;例如pkg-config --libs libzip将为libzip提供-lzip -lz的链接器标记。

  2. 标头包含函数的声明,数据结构的定义以及与编译器相关的其他内容,但没有链接器的信息。这是一个历史性的意外;它已在Plan 9 C编译器中修复,我也相信微软的编译器,但不是普通的Unix / Linux编译器。

    请注意,标题和库不是一对一的对应关系。例如。一些库是“仅标题”,包括libc在内的一些库有许多标题。在其他情况下,可以使用多个版本的库(通用版本,调试版本,某些处理器的优化版本,......),所有版本都具有相同的标题。

  3. 我认为这取决于GCC版本,但我从未弄清楚哪些版本需要严格的订购,哪些版本不需要。安全的赌注是以反向依赖顺序链接库;因此,如果libfoo使用libbar,请先与libfoo相关联,然后libbar。前面提到的pkg-config也会为支持它的图书馆负责。