2018年5月20日日曜日

DOSBox-X のビルドに必要な C++11 に準拠した標準ライブラリを選ぶ

これまでいろいろ DOSBox-X のビルドについて書いてきましたが、いまいち全然わかってないことが自分でわかりましたので先行の記事には誤りが多分に含まれているはずです。

DOSBox-X のビルドには C++11 が必須と要求されていて、この意味は C++11 に対応したライブラリが必要。この必要性を自分は今までまったく認識していなかったので gcc5 ではコンパイルできるが clang ではできず、理由が不明のままずっと放置してきた。これは恥ずかしい。

Mountain Lion にインストールされるがデフォルトでは使用されない標準ライブラリ libc++ は C++11 に対応しているのに、デフォルトで選択される gcc4.2.1 の標準ライブラリ libstdc++ は C++11 に対応していなかった! というのが clang で DOSBox-X をビルドできない理由だったことが今回わかった。

 C++11 に準拠した標準ライブラリのうち自分で利用可能な選択肢には、 MacPorts 由来の gcc5 あたりの libstd++ と Mountain Lion では備え付けの libc++ の2つがある。前者でコンパイルが通る理由は、単に gcc5 でデフォルトに使用される標準ライブラリ libstd++ が C++11 に対応しているからだ。いっぽう、 Mountain Lion 上 clang のデフォルトでは gcc4.2.1libstdc++ を標準ライブラリに選ぶようになっていて、実際にインストールされているにもかかわらず libc++ を選ばないらしい。そこで clang でビルドする際には、標準ライブラリを libc++ に変更するために明示的に -stdlib=libc++ のオプションが要る、というのが Mountain Lion を導入して6年目にしてようやく判明した真実だったわけだ。

こんな当たり前の話をわざわざここに書く異常な恥ずかしさを想像してみてください。この記事に誤りがないことが望まれる。

0 件のコメント:

コメントを投稿