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でやっているなら、これを回避する方法はありますか?
POSIXの機能をコンパイラに伝えましたか?またはGNUの機能ですか? '-std = gnu ++ 14'か' -D_XOPEN_SOURCE = 700'を試して、それがソートされているかどうか確認してください。 –
'-std = gnu ++ 14'が働いてくれました。私はそれについて知らなかった。それは私に少し奇妙です。なぜそれがデフォルトでオンにならないのですか? Cygwinを最初に使用しているのは、POSIXとGNUが必要なためです。 – turanc
多くの要因が考えられます。主なものはあなたが使っている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を使用しています。 –