2009-07-12 2 views
2

내 맥 OSX 레오파드 시스템에서 기존 C++ 패키지를 컴파일하려고, 다음과 같은 오류가 발생 해요 :의 getline()가 GNU 특정 확장 때문에mac osx에서 gnu/c getline()을 사용하여 C++ 코드를 컴파일 하시겠습니까?

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

이 아마입니다.

어떻게 든 osx 기본 g ++ 컴파일러가 GNU 특정 확장을 인식하도록 할 수 있습니까?

(그렇지 않으면, 난 항상 내 자신의 구현 또는 GNUS 원래 하나를 제공 할 수 있습니다,하지만 난 "청소기"솔루션 가능한 경우 선호) 내가 특정 정의 것을 본 적이 잘 모르겠어요

답변

5

getline는 glibc는 버전 2.10에 stdio.h에 정의 된 이후 있지만 이전 버전에서,도 (지금까지, 확실히 getline이 없었 10.5을 추가, 10.7 확실히 수행)되어있는 BSD에서 파생 된 libc.

GNU 라이브러리의 변경은 이제 getline을 포함하는 POSIX 2008 표준의 변경으로 인해 발생했습니다.

아마도 이것은 시간이 지남에 따라 다른 libc로 전파 할 것입니다. 그 동안 많은 프로젝트에서 문제를 일으키는 것으로 알고 있습니다.

download a stand alone version from GNU 수 있습니다.

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) 

또는 그 라인을 따라 뭔가 당신이 당신의 자신의 프로그램을 일치하도록 조정해야합니다.

관련 문제