1

我是 C 新手。我在 Ubuntu 12.04 中编码。我刚刚遇到了这个问题,并使用为该问题提供的解决方案(using -lncurses flag while compiling with gcc)解决了它。

我的问题是,

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

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

  3. 我们是否必须维护一些在命令中写入此库标志的顺序gcc。因为这个答案中的一个声明说顺序很重要?是什么决定了标志的顺序?

提前致谢。

4

1 回答 1

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

  2. 头文件包含函数的声明、数据结构的定义以及与编译器相关的其他内容,但不包含链接器的信息。这有点历史性的事故;它已在 Plan 9 C 编译器中修复,我也相信 Microsoft 的编译器,但不是常见的 Unix/Linux 编译器。

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

  3. 我相信这取决于 GCC 版本,但我从未弄清楚哪些版本需要严格排序,哪些不需要。安全的选择是以反向依赖顺序链接库;所以如果libfoo使用libbarlibfoo首先链接,然后libbar。前面提到pkg-config的也为支持它的库处理了这个问题。

于 2013-08-22T13:37:17.240 回答