【问题标题】:What does the flag "-D_POSIX_C_SOURCE=200112L" mean?标志“-D_POSIX_C_SOURCE=200112L”是什么意思?
【发布时间】:2013-09-22 20:55:01
【问题描述】:

没有它我无法使用连接到互联网所需的库,但我不知道这意味着什么:

-D_POSIX_C_SOURCE=200112L

谁能解释一下?

【问题讨论】:

  • 它是 POSIX 编译的功能请求标志。 See this article。实际上,这是您的程序说“我想要具有此级别的 POSIX 功能”的一种方式。随着更多功能被添加到修订后的 POSIX 标准中,值会发生变化以反映这些变化。你这样做是在告诉实现你想要哪个“版本”的功能。
  • @WhozCraig 这对我来说听起来不错。

标签: c compiler-flags


【解决方案1】:

随着时间的推移,POSIX 已经进行了多次修订。每个新版本都更改了它支持的功能集。

此宏定义了您希望构建程序的一组功能。它会影响包含文件的预处理方式,从而产生不同的函数原型。例如,一些库会在编译时检查 POSIX_C_SOURCE 级别以确定是否可以使用线程。库可以使用此定义来确定某些 POSIX 函数是否可供使用,或者它们是否必须提供自己的实现。

根据 Wikipedia (https://en.wikipedia.org/wiki/POSIX),POSIX 2001 等同于单一 UNIX 规范版本 3。也许您在原始帖子中提到的版本是第一个定义您需要的网络功能的版本。此标准中明确指定了诸如 listen() 和 bind() 之类的函数,而粗略的搜索并未发现在以前的 POSIX 版本中提及它们。

如果没有指定 POSIX_C_SOURCE,你链接的库要么对可用的功能集做出一些假设,要么可能会抱怨它没有定义并放弃。也许您可能在需要正确设置此变量的库中链接?

【讨论】:

    猜你喜欢
    • 2014-06-04
    • 2014-02-27
    • 2020-09-25
    • 1970-01-01
    • 2011-04-29
    • 2012-11-10
    • 2022-01-14
    • 2013-05-01
    • 2014-03-19
    相关资源
    最近更新 更多