2009-07-12 15 views
2

私は私のMac OSXのヒョウのマシン上で、既存のC++パッケージをコンパイルしようとすると、次のエラーを取得しています:getlineの()はGNU特有の拡張であるため、Mac OS X上でgnu/c getline()を使ってC++コードをコンパイルしますか?

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

これはおそらくです。

osxのデフォルトg ++コンパイラで、このようなGNU固有の拡張機能を認識させることはできますか?

(ない場合は、私はいつも私の独自の実装やグニュースオリジナルのものを供給することができますが、私は可能な場合は、「クリーンな」解決策を持っていることを好む)

答えて

5

getline(これまでのところ、 10.5を追加しました間違いなくgetlineを持っていなかった、と10.7は間違いありません)glibcのバージョン2.10以降ではなく、以前のバージョンでstdio.hで定義され、またされにBSD由来のlibc。

現在、getlineを含むPOSIX 2008標準の変更により、GNUライブラリの変更が生じました。

これは、おそらく、時間の経過とともに他の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) 

またはそれらの線に沿って何か、あなたがあなた自身のプログラムに合わせて、それを調整する必要があります。

関連する問題