このコードをコンパイルしようとすると、常にこのエラーが発生します。
In file included from /usr/include/wchar.h:6:0,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/cwchar:44,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/bits/postypes.h:40,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/iosfwd:40,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/ios:38,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/ostream:38,
from /usr/lib/gcc/i686-pc-cygwin/4.9.2/include/c++/iostream:39,
from test.cpp:1:
/usr/include/sys/reent.h:14:20: fatal error: stddef.h: No such file or directory
#include <stddef.h>
^
compilation terminated.
私がコンパイルしようとしていたコードは次のとおりです。
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World! :D";
return 0;
}
エラーは、gcc-coreパッケージとgcc-g ++が同じバージョンではないためです。どちらかをダウングレードして問題を解決するか、両方のライブラリを更新します。両方のライブラリを更新することをお勧めします。
MinGWの新規インストールでこのエラーが発生しました。「Prasanth Karri」による現在受け入れられている回答で言及されているインストール済みパッケージとは関係ありません。私の場合問題は-nostdinc
私のMakefileで。実際には、MinGWの使用時ではなく、異なるターゲットプラットフォーム用にビルドするときにのみコンパイラフラグが必要だったため、MinGWビルドからそのフラグを削除することで問題を修正しました。
Cで記述されたソフトウェアライブラリを既存のデモプロジェクト(C++ mbedライブラリを使用)に組み込むと、この問題が発生しました。デモプロジェクトは問題なくコンパイルされますが、既存のメインファイルを自分で置き換えた後、このエラーが発生しました。
この時点では、必要なmbedライブラリがC++で書かれているという事実についてはまだ考えていませんでした。私自身のメインファイルは、#include
mbedヘッダーファイルである.cファイルでした。その結果、通常のCソースをC++ソースのように使用しました。したがって、メインファイルのコンパイルに使用されたコンパイラはCコンパイラでした。このCコンパイラは、C++コンパイラではないため、モジュールの#include
実際には存在しない (スコープ内)に遭遇しました。
ビルドログの出力を調べた後にのみ、さまざまなソースCおよびC++ファイルが複数のコンパイラ(c ++コンパイラ)によってコンパイルされていることに気付きました。使用したプロジェクトでは、以下に示すように、コンパイラーarm-none-eabi-c ++およびarm-none-eabi-gcc(組み込みシステム用)を使用しました。
コンパイルログ:
Building file: ../anyfile.cpp
Invoking: MCU C++ Compiler
arm-none-eabi-c++ <A lot of arguments> "../anyfile.cpp"
Finished building: ../anyfile.cpp
Building file: ../main.c
Invoking: MCU C Compiler
arm-none-eabi-gcc <A lot of arguments> "../main.c"
In file included from <Project directory>\mbed/mbed.h:21:0,
from ../main.c:16:
<Project directory>\mbed/platform.h:25:19: fatal error: cstddef: No such file or directory
compilation terminated.
もちろんC++環境では cstddefが存在する ですが、C環境ではcstddefは存在しません 代わりにCのstddefの実装です 。
つまり、CstddefはCコンパイラに存在しません。 main.cファイルの名前をmain.cppに変更し、残りのコードもスムーズにコンパイルすることで、この問題を解決しました。
TLDR/Conclusion:C++プロジェクトをビルドするときは、CファイルとC++ファイル(ソースおよびヘッダー)を混在させないでください。可能であれば.cファイルの名前を.cppファイルに変更して、必要に応じてCコンパイラーの代わりにC++コンパイラーを使用します。