googletestを検索してこのブログを訪れるひとが多くなったようなので、前回バージョン1.3.0のときに書いた時以降の新しい情報も載せておこうと、最新のバージョンである1.4.0を調べていたんですが。
Cygwin上でコンパイルするとき、g++のコンパイルオプションに-ansiを付けるとコンパイルエラーになる!?
原因を調べていくと、インクルードされるヘッダファイルgtest/internal/gtest-port.hの中で使われているfileno
関数が未定義とのこと。
fileno
関数が何者かはさておいて、-ansiオプションを付けるとコンパイルできなくなるということはANSI C++には含まれないの?と調べてみると。man fileno
で書かれている文章の中に「POSIXには含まれるがANSI Cには含まれない」との文言が。
普段からコンパイルは-ansiオプションを付けているので、これは少々面倒なことになりました。テストコードのコンパイルだけオプションを外せば、まぁ運用上はどうにかなるんですが。
で。普段使っているもう一つの環境Mac OS Xでも同じように調べてみたところ…。-ansiオプション付けても通りました。なぜ?
同じようにman fileno
で仕様を調べてみると、こちらにはCygwinのときに書かれていた文言がありません。
どっちが正しいのさ…(?_?)
。
普段からCygwin使ってたりMac OS Xをコンソールで使ってたりする割には、UNIX系の環境とかPOSIXとか、実はあんまり詳しくないというのがこういうところで露呈してしまいます。
Cygwinは会社での環境、Mac OS Xは自宅での環境で、こんなことになるとは思っていなかったのでバージョン番号とか確認していなかったわけで。引き続き調査しようと思います。