不能包含MinGW的标准C ++库

时间:2012-06-02 08:25:03

标签: c++ qt compiler-errors mingw

我有一个Qt C ++应用程序可以很好地编译MSVC编译器。现在我正在尝试使用MinGW编译相同的应用程序,以便最终将其移植到Mac OSX。但是,当这样做时,我在所有标准包含上都出现错误:

#include <algorithm>
#include <ctime>
#include <map>
#include <sstream>
#include <vector>

编译器输出:

..\trunk\stable.h:29:21: error: algorithm: No such file or directory
..\trunk\stable.h:30:17: error: ctime: No such file or directory
..\trunk\stable.h:31:15: error: map: No such file or directory
..\trunk\stable.h:32:19: error: sstream: No such file or directory
..\trunk\stable.h:33:18: error: vector: No such file or directory

我真的不明白可能导致这个问题的原因。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

如果您的源代码是C ++但正在编译为C,那么这是您将看到的更常见的错误之一。

如果源使用C ++文件的.C(注释大写C)扩展名,则会发生这种情况。如果源用于不区分大小写的文件系统(通常与所有窗口一样),那么make可能无法正确判断是将它们编译为C还是C ++。

默认情况下,make(包括mingw版本)将从扩展程序.C.cc.cpp编译C ++源代码。 (This page有详细信息)。

您有3个选项:

  • 将您的来源重命名为上述扩展程序之一。通常.cc.cpp是最容易使用的。
  • 如果makefile中的所有来源,您可以CC=mingw32-g++ mingw32-make -f Makefile.Debug
  • 您可以将其添加到makefile或其中一个包含的文件中:

    %.o: %.c++
        $(CXX) $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<
    

    但这仅在makefile未更改编译规则时才有效。