MacOS XでC++のサンプルコードをコンパイルする。


Interface 04/02号の特集がC++テンプレートだったので、
ちょっとC++のテンプレート機能を試してみることにした。
Linuxマシンをわざわざ立ち上げるのも面倒なので、
Macで試そうかと思ったら、HelloWoldすらコンパイルできないじゃないですか!!
"std::がリンクできん"とか、怒られる。
MacOS Xのgccって、Appleがカスタムしてるんだっけ…。Objective-C専用なのか?
いや、CarbonもあるからC++使えるはずだよなぁ…。
最近、Objective-CとC++をミックスできるようなこと、書いてあったし。


んで、ググってみたところ、cc/gccコマンドではなくc++/g++コマンドを使えばうまくいくらしい…。
確かにうまくいく。

なぜかといえば、
cc/gcc → gcc-3.3、 c++/g++ → g++-3.3 とリンクされている模様。
で、gcc-3.3はAppleカスタムのgcc、g++-3.3は普通(非カスタム)なgcc であって、
Appleカスタムなヤツは標準ライブラリ(標準入出力ストリームとか)をデフォルトでバインドしないみたい…。
まぁ、Macのアプリケーション作るのに、いらないので当然か。

ちなみに、X codeでC++ツールのプロジェクトを作った場合、すんなりとコンパイルできる。
使用するコンパイラをIDEが切り替えてるのか? なんかオプションを付加するのか?
ライブラリはlibstdc++.aしかリンクしてないみたいだが…。
(gcc -lstdc++ helloworld.cpp ではダメだったのに…。)
謎は残るが、まぁよいか。


教訓:MacOS Xで標準入出力ストリームを使ったプログラムをコンパイルするときは、c++/g++を使え。


このドキュメントを書いた人:ちょくよん