我正在尝试在我的mac osx leopard机器上编译一个预先存在的c ++包,并收到以下错误:
error: no matching function for call to 'getline(char**, size_t*, FILE*&)'
这可能是因为getline()是GNU特定的扩展。
我可以以某种方式使osx默认g ++编译器识别这样的GNU特定扩展吗?
(如果没有,我可以随时提供我自己的实现或GNU原始实现,但我更愿意有一个“更清洁”的解决方案,如果可能的话)
答案 0 :(得分:5)
getline
在glibc版本2.10及更高版本的stdio.h
中定义,但在早期版本中没有定义,也没有(到目前为止; 添加 10.5肯定没有getline
在BSD派生的libc中,1}}和10.7肯定会这样做。
GNU库的变化是由于POSIX 2008标准的变化,现在包括getline
。
据推测,随着时间的推移,这将传播给其他libc。与此同时,我知道这给很多项目带来了麻烦。
答案 1 :(得分:1)
通常,解决方案是使用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)
或类似的东西,你必须调整它以匹配你自己的程序。
答案 2 :(得分:0)
我不确定我是否曾经看到过'getline'的具体定义是我所知道的使用c ++流+字符串的定义。