2016-07-01 13 views
1

cygwinでpthreadsをgcc(g ++正確に)で使うプロジェクトをコンパイルしています。私はいつもこれをLinux上でどのように開発したかを見て、何の問題もありませんでした。__POSIX_VISIBLEがcygwinで私のpthreadingを台無しにしています

今は、これらの関数が宣言されていないと不平を言うコンパイラで、いくつかのpthread関数を使用するコードをコンパイルできません。私は私のツールチェーン、G ++(GCC)5.4.0に付属pthread.hのは、

#if __POSIX_VISIBLE >= 200112 

、これらはcygwinの/ Windows上で利用可能であることから機能を妨げているとのセクションを守ったことに気づきました。

"__POSIX_VISIBLE"の検索を試みましたが、本当に役立つものは見つかりませんでした。これは実際に何をし、なぜですか?私は、pthreadのいくつかの部分がWindowsやCygwinなどで動作できないと仮定しています。しかし、なぜなら、のなんとのpthreadがこれでブロックされるのでしょうか?それは-pthreadが使用されていることについても不平を言っていません。

私は最終的にすべてのpthreadをC++スレッドに変更するつもりですが、今すぐコンパイルしたいので、より直ちに問題に取り組むことができます。私がcygwin/windowsでやっているなら、これを回避する方法はありますか?

+1

POSIXの機能をコンパイラに伝えましたか?またはGNUの機能ですか? '-std = gnu ++ 14'か' -D_XOPEN_SOURCE = 700'を試して、それがソートされているかどうか確認してください。 –

+0

'-std = gnu ++ 14'が働いてくれました。私はそれについて知らなかった。それは私に少し奇妙です。なぜそれがデフォルトでオンにならないのですか? Cygwinを最初に使用しているのは、POSIXとGNUが必要なためです。 – turanc

+0

多くの要因が考えられます。主なものはあなたが使っているGCCのバージョンです - 古いバージョンはデフォルトで最新の標準を使用しません。 (IIRC、[GCC 5](https://gcc.gnu.org/gcc-5/changes.html)はデフォルトでC++ 11に、バージョン[GCC 6](https://gcc.gnu.org /gcc-6/changes.html)はデフォルトでC++ 14を使用しています。 –

答えて

1

詳細は/usr/include/sys/features.h です。

デフォルトは、すべてを含む_GNU_SOURCEです。 プロジェクトで定義が制限されていないかどうかチェックしてください。-stdまたはansi

+0

これは問題があることを知るには時間がかかりすぎました。 '-std = C++ NN'は明らかにいくつかのPOSIX機能を無効にします。これを '-std = gnu ++ NN'に置き換えると、すべてが修正されているようです。 –

関連する問題