【问题标题】:Does POSIX if.h require a library to usePOSIX if.h 是否需要使用库
【发布时间】:2016-06-11 10:04:28
【问题描述】:

使用 POSIX 头文件 #include <net/if.h> 是否也需要链接库?当我使用头文件中的常量时,出现以下错误。

错误:IFNAMSIZ 未声明

#include <net/if.h>

int main(int argc, char** argv) {
    char f[IFNAMSIZ]; // compiler error
    return 0;
}

如果我需要一个库,它的名称是什么? gcc -o test test.c -lif --std=c11 之类的东西不是有效的库。谷歌搜索这是什么都没有出现,这很令人沮丧。

*PS:如何找出 POSIX 标头需要哪些库?

解决方案:问题是因为我正在使用--std=c11 进行编译。这个问题描述了问题和解决方案:Why does C99 complain about storage sizes?

【问题讨论】:

  • 使用 grep 并通过 lib 文件夹运行它;)

标签: c linux posix


【解决方案1】:

quick google 看来,定义的名称似乎是IF_NAMESIZE,而不是IFNAMSIZ

您得到的错误不是来自缺少的库*,而是来自编译器步骤中缺少的定义,这意味着头文件没有定义 IFNAMSIZ

*) 如果是库问题,您会看到带有“缺少外部符号”消息的链接器错误。

【讨论】:

  • 我通过 locate net/if.h 找到的头文件将其定义为 IFNAMSIZ 并使用 IFNAMESIZE 导致相同的编译器错误
  • 您的系统上可能有多个if.h 标头。似乎包含的那个定义了IFNAMSIZ,因为否则您将不会收到您的错误消息。特别是,您得到的错误不是来自缺少的库,而是来自编译步骤中缺少的定义。
  • @JakeM 是IF_NAMESIZE,带下划线。
  • 虽然上述答案确实解决了狭隘的问题,但它不适用于使用该头文件中的任何其他函数/等。问题是因为我正在使用--std=c11 进行编译。这个问题描述了问题和解决方案:stackoverflow.com/questions/10433982/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多