【问题标题】:Which MinGW file to use as a C++ compiler哪个 MinGW 文件用作 C++ 编译器
【发布时间】:2011-02-18 23:54:03
【问题描述】:

我刚刚安装了 MinGW,在 bin 文件夹中我可以看到 7 个编译我的程序的 .exe 文件:

  1. c++.exe
  2. g++.exe
  3. mingw32-c++.exe
  4. mingw32-g++.exe
  5. gcc.exe
  6. mingw32-gcc.exe
  7. mingw32-gcc-4.4.1.exe

我的小程序 (testprog.cpp) 都能正确编译;在bin文件夹下生成a.exe文件,运行正常。

它们之间有什么区别,我应该使用哪一个? 另外,每次编译成功后,如何自动将输出文件的名称从 a.exe 更改为 testprog.exe?

【问题讨论】:

  • 哪个生成最快的可执行文件?

标签: c++ c compiler-construction mingw


【解决方案1】:

这些遵循 gcc 命名约定。

  • c++.exe 是系统 c++ 编译器的传统名称
  • g++.exe 和 gcc.exe 是为“当前系统”编译的 gcc 编译器的名称
  • mingw32-* 版本是交叉编译到“mingw”目标的编译器的名称。在这种情况下,这与系统目标相同。
  • 然后 mingw32-gcc-4.1.exe 是“gcc for mingw target version 4.1”

您通常应该编译带有“gcc”变体的 C 代码,以及带有“g++”变体的 c++ 代码。

使用-o filename来指定输出文件名,默认为a.exe

【讨论】:

    【解决方案2】:

    很可能它们都是一样的;要么是精确的副本,要么是相互之间的符号链接。尝试在每个上使用--version 标志,看看你有什么。在我的 MingGW 安装中,每个二进制文件都不同(使用 diff 检查),但它们都输出相同的版本信息(除了第一位,即文件名):

    gcc.exe (GCC) 3.4.5 (mingw-vista special r3)
    Copyright (C) 2004 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    

    使用-o 标志更改输出文件名:

    gcc -o testprog.exe testprog.cpp
    

    【讨论】:

    • 你是对的。前 4 个是同一个文件,后 3 个也是。但有什么区别?并感谢 -o 提示。
    • @Abbas - 前 4 个是 C++ 编译器,后 3 个是 C 编译器。正如@Crazy Eddie 在他的回答中提到的那样,他们可能有不同的链接行为。名称中带有“++”的文件可能也默认将文件编译为 C++,即使它们具有简单的 .c 扩展名。
    【解决方案3】:

    在 unix 中,它们主要是通过符号链接。唯一的主要区别在于“cc”与“++”之间。如果您使用标准 C++ 库的任何部分,您应该注意到这两者之间的区别。 '++' 版本会自动链接到该库。 'cc' 是 C 编译器,所以不要...尽管您可以通过添加 -lstdc++ 或其他内容将它们用作 C++ 编译器。

    【讨论】:

      【解决方案4】:

      当我在网上搜索有关制作一些 DLL 的说明时,我遇到了一个 C++ 编译过程,据我所见,使用 g++ 编译 c++ 的方式与使用 gcc 相同。

      【讨论】:

        猜你喜欢
        • 2016-08-11
        • 1970-01-01
        • 2013-03-03
        • 2012-06-01
        • 2021-03-03
        • 1970-01-01
        • 2014-11-27
        • 2013-06-17
        • 1970-01-01
        相关资源
        最近更新 更多