g++でリンカエラー

Mac OSX 10.9 Mavericksを使っている。homebrewを使ってインストールしたgcc48のg++でコードをコンパイルしていると、次のようなエラーが出た。

Undefined symbols for architecture x86_64:
 "isalpha(int)", referenced from:
 (略)
 ld: symbol(s) not found for architecture x86_64
 collect2: error: ld returned 1 exit status

isalphaが無いとのこと。isalphaがないとかありえない。これは、cctype functions (e.g. isprint) not defined at link time when using g++ -std=c++11が原因。g++でコンパイルするときに-std=c++11オプションをつけるとcctypeがリンクできないとのこと。
解決方法があって、/usr/include/sys/cdefs.hを開いて

#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__)

#elif defined(__GNUC__) && defined(__GNUC_STDC_INLINE__) && !defined(__cplusplus)

に書き換えれば良い。なお、編集時にはsudoを使う。

sudo vim /usr/include/sys/cdefs.h

これでコンパイルが通るはず。

コメントする