【问题标题】:implicit declaration of function 'getline' even thought it is函数'getline'的隐式声明甚至认为它是
【发布时间】:2018-06-10 17:51:30
【问题描述】:

我目前在 c 中遇到了一些关于 getline() 的问题。 我知道这不是标准的 C 函数,但是根据我在网上看到的内容,我正在使用适当的资源。

两个都有:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

但是我仍然有编译问题,它给了我这个输出:

main.c: In function 'read-file':
main.c:46:17: warning: implicit declaration of function 'getline' [-Wimplicit-function-declaration]
C:\Users\Miguel\AppData\Local\Temp\cc6aYESe.o:main.c:(.text+0x85): undefined reference to `getline'
collect2.exe: error: ld returned 1 exit status

我似乎无法弄清楚出了什么问题,我已经看到了几个这样的问题,但是似乎没有解决方案适用。

【问题讨论】:

  • 你在一台 Windows 机器上;您使用的是 MinGW 还是 Cygwin 或其他东西?如果您使用的是 MinGW,它可能没有被定义——它是 Windows 的最小 GNU。您可以尝试请求 POSIX 支持(例如 #define _XOPEN_SOURCE 700),但如果 _GNU_SOURCE 不起作用,那么 POSIX 也可能不会。我不经常建议这样做,但尝试禁用警告(更改编译器选项),或在代码中包含声明(ssize_t getline(char ** restrict linep, size_t * restrict linecapp, FILE * restrict stream);),并查看它是否链接。可能不会。
  • 事实上,如果您收到“未定义对getline 的引用”消息,则说明您的环境中没有定义该函数。您需要提供自己的实现——编写起来并不难。或者您可以随时联系我;查看我的个人资料。

标签: c compiler-errors getline


【解决方案1】:

尝试使用以下预处理语句: #define _POSIX_C_SOURCE 200809L

"它允许您使用不属于标准 C 库但属于 POSIX.1(IEEE 标准 1003.1)标准的函数。使用 feature_test_macros 中描述的宏允许您控制系统公开的定义头文件。”

参考:What does #define _POSIX_SOURCE mean?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2017-12-06
    • 2021-01-20
    • 1970-01-01
    相关资源
    最近更新 更多