1. ホーム
  2. c

[解決済み] windows.h no such file or directory (compile c code on linux) [closed].

2022-02-18 11:47:21

質問内容

私はヘッダーを含むC言語プログラムを持っています。このプログラムは、Windows上で正常に動作しますが、私はコードを使用してコンパイルすると、Linux上で動作します。

gcc main.c -Wall -o main

得ることができる。

main.c:2:10: fatal error windows.h: そのようなファイルやディレクトリはありません コンパイルが終了しました

このエラーが発生する理由と修正方法をご存知でしょうか?

解決方法は?

問題は、あなたのコードが Windows 専用の関数宣言を取得するために windows.h ヘッダーファイルを使っていることです。なぜなら、Linuxのツールチェーン(GCCなど)は、Linux用にコンパイルするために必要なファイルだけを(デフォルトで)含むからです。

いくつかのオプションがあります。

  1. エドヒールとして 提案された このコードをLinuxに移植してください。つまり、windows.hのインクルードを削除し、Windows APIを使用しているすべての関数コールをLinuxの同等品に置き換えるということです。OSに依存する呼び出しをプラットフォームに依存しないコードにリファクタリングしない限り、このソースコードはLinuxでしか動作しないことになります。注意:扱うプログラムが些細なものでない限り、これは簡単な作業ではありません。WindowsのAPI関数がすべてLinuxと同等であるという保証はないのです。

  2. ビルドシステムにWindowsツールチェーンをインストールします。このツールチェーンにはwindows.hと クロスコンパイル を作成します。この結果、Linuxでは動作しないバイナリができますが する はWindowsで動作します。

  3. この2つのオプションの中間は、実際に両方を行うことであり、そのためには 条件付きコンパイル を使用すると、あるターゲットまたは別のターゲットに対して選択的にコンパイルすることができます。