問題点
C言語の標準ライブラリであるはずのthreads.hがインクルードできません。解決方法をご教授願いたいです。
環境
OS : windows10
コンパイラ : gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
他に補足で必要な情報があればコメントください。
発生している問題・エラーメッセージ
gw.c:34:10: fatal error: threads.h: No such file or directory #include <threads.h> ^~~~~~~~~~~ compilation terminated.
試したこと
MinGWのincludeフォルダの中にthread.hが存在しませんでした。なのでこのようなエラーが出ているのかと思われますが、ここからどのようにすればよいかわかりません。
どこにあるか探すしかないのでは。
ネットなどでthreads.hのソースコードをインストールしてフォルダ内に入れるということでしょうか?
いえ、インストールしている MinGW の中にあるか、あるならどこにあるか、あったらそれを include 出来るようにすれば良いでしょうし、無ければそれに代わるものを探すとか、ようは手元にある中でどうにかするしかありません。
ネットにあったとしてもそれがお手元の MinGW で使えるものとは限りません。
C の互換性は include ファイルの中身をそれぞれのコンパイル環境によって変えることで保たれるソースレベルの互換性ですので、 threads.h というファイル名が同じでも中見がご自身の環境で使えるものかは分かりません。
MinGW内をすべて探しましたが、やはりthreads.hは見つかりませんでした。この場合新しく最新版のMinGWをインストールして環境を再構築した方が手っ取り早いのでしょうか。
他の方の回答へのコメントとして「別の方の環境下では動作しているので、ソースコードが悪いのではなく自分の動作環境に問題があると思われます。」とありますが、その「別の方の環境」とはOSやコンパイラのVer.などほぼ同一の環境なのでしょうか?
>>meg_さん
別の方のOSはMacとLinuxです。使用コンパイラはgccと同じですが、バージョンは確認していなかったので確認しようと思います。ちょっと今日中には確認できそうにないので、明日確認します。すぐ対応できず申し訳ありません。
>>hoshi-takanoriさん
そうなのですか?自分はソースコードのマルチスレッド部分をいじっていないので詳しくはわからないのですが、別の環境下では動いているので未実装ということはないと思われますが...
他のところにも書きましたが、今後の論文で発表する内容なのでソースコードをそのまま載せることはできません。特定の部分だけ見せることは可能なので、その場合はお申し付けください。
> コンパイラ : gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
> MinGWのincludeフォルダの中にthread.hが存在しませんでした。
ターゲット環境は gcc/Ubuntu と MinGW/Windows のどちらなのでしょうか。
以下の回答によれば MSYS2 にはある様です。
Mingw-w64 C11 threads.h not found?
https://stackoverflow.com/a/71573374
>>int32_tさん
wslで実行しているのでgcc/Ubuntuなのでしょうか。申し訳ないです。その部分疎くて...
だとしたらMinGW内のフォルダを探すのはかなり見当違いなことをしていたということでしょうか。
>>melianさん
一度MSYS2を試してみようと思います。
WSL なら MinGW も MSYS2 も忘れて良いと思います。
Ubuntu 20.04 なら threads.h サポートしてるようですね。
https://stackoverflow.com/a/65759424/1019868
C11対応の処理系であれば見つかるはず... gcc 7.5 ってC11対応してないんだっけ?
>>hoshi-takanoriさん
ubuntu20.04で実行したらできました!使っていたubuntuのバージョンが古かったのが問題だったみたいです。本当に助かりました。ありがとうございます!
回答4件
あなたの回答
tips
プレビュー