在Mac OSX上使用GNU / C函数getline()编译的C ++代码?(compiling

2019-09-18 09:58发布

我试图编译我的Mac OSX豹机器上的预先存在的C ++封装,并得到了以下错误:

    error: no matching function for call to 'getline(char**, size_t*, FILE*&)'

这可能是因为函数getline()是一个GNU特定扩展名。

我能以某种方式使OSX默认的G ++编译器识别这样的GNU特定扩展?

(如果没有,我随时可以提供自己的实现或GNUS原单,但我更喜欢有一个“干净”的解决方案,如果可能的话)

Answer 1:

getline定义在stdio.h的glibc的版本2.10及更高版本,但不是在早期版本,也不是;(到目前为止添加 10.5绝对没有getline在BSD衍生的libc和10.7肯定不会)。

在GNU库中的变化是因为在2008年POSIX标准,现在包括一个变化的大约getline

据推测,这会传播到其他的libc随着时间的推移。 在此同时,我明白,这是造成麻烦了很多项目。

您可以从GNU下载一个单机版本 。



Answer 2:

一般情况下,解决方案是使用autoconf或一些类似的工具来确定当前平台是否已getline或没有,只在需要时提供自己的定义。

例:

# configure.ac
AC_CHECK_FUNCS([getline])

// compat.h
#include "config.h"
#ifndef HAVE_GETLINE
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
#endif

// getline.c
ssize_t getline(char **lineptr, size_t *n, FILE *stream) {
    /* definition */
}

# Makefile.am
program_LDADD = $(if $(HAVE_GETLINE),,getline.o)

或沿着这些线路的东西,你必须进行调整,以符合您自己的程序。



Answer 3:

我不知道我曾经看到“函数getline”的具体定义这里是一个我所知道的,它使用C ++流+字符串。

http://www.cplusplus.com/reference/string/getline/



文章来源: compiling c++ code using gnu/c getline() on mac osx?