【问题标题】:MinGW gcc gives errors when other compilers do not当其他编译器没有时,MinGW gcc 会出错
【发布时间】:2016-10-27 23:34:48
【问题描述】:

在你问之前,是的,我已经查了好几天了。我完全卡住了...我正在使用 MINGW32(我的快捷方式是 MSYS)来编译我的 c 和 cpp 代码。大约 2 或 3 天以来,我一直收到奇怪的错误。 (下)它以前工作得很好。我什至运行了我之前编译的相同代码,它给出了相同的错误。然后我进入 DevC++ 并打开然后编译它就可以了。

错误:

命名空间:找不到命令

使用:找不到命令

语法错误: int main(){

(有时它会给我带来难以理解的混乱)

我真的卡住了...我不想切换到 DevC++...我喜欢使用自己的文本编辑器并在命令行中编译。

【问题讨论】:

  • 抱歉,这是我第一次在这样的帖子上发帖。我在这里阅读了很多对我有帮助的东西,所以我决定问...
  • 请张贴“无法阅读的大烂摊子”。以及您的实际程序。如果没有看到该程序,不确定我们将如何帮助您。
  • 我打赌你运行的是 gcc 而不是 g++。另外,这个问题与 IDE 无关,所以你关于 DevC++ 的观点毫无意义。
  • 发布最简单的可能导致错误的完整程序
  • “找不到命令”错误表明您实际上是在尝试将 C++ 程序作为 shell 脚本运行。如果这不是正在发生的事情(或者如果这不能帮助您弄清楚发生了什么),请将您正在编译的代码缩减为一个仍然显示相同错误的小程序,请将该代码与您的确切命令一起发布 用于编译它和确切的错误消息(使用复制/粘贴)。

标签: c++ gcc mingw


【解决方案1】:

根据您的错误 namespace: command not foundusing: command not found 告诉我您没有使用适当的编译器编译代码。

MinGW32 工具链中的参考:

gcc.exe = C

g++.exe = C++

您可能会发现了解 IDE 对您的编译器的实际作用很有用。 我当前的 IDE 允许我查看它为构建我的项目而运行的所有命令:

C:/mingw32/bin/g++.exe  -c  "C:/MyProgram/main.cpp" -g -O0 -std=c++14 -Wall  -o ./Obj/main.cpp.o -I. -IDependencies/Something/include

让我们来看看这是做什么的。

我当前的工具链是 MinGW32,它位于 C:/mingw32/bin/g++.exe

g++ 是我们的 c++ 编译器,因此我们调用 g++.exe 并传递以下开关:

-c "C:/MyProgramm/main.cpp"

这告诉我的编译器从我的项目目录中编译 main.cpp。然后我的 IDE 添加了一些额外的命令行开关。为了回答的目的,我只会考虑-o。这告诉我们将输出文件从我们的代码 main.cpp 转换为一个输出文件。

我们生成这样一个文件的原因是为了节省编译时间,这样我们就不必在不更改文件的情况下编译同一个文件两次。我们对每个文件执行此步骤,创建.o 文件的集合。

然后新文件保存在"C:/MyProgramm/Obj/main.cpp.o"

这意味着你的命令行函数看起来像这样:

C:/mingw32/bin/g++.exe -c "<my project directory>/<file>.cpp" -o ./Obj/<file>.cpp.o

我建议您阅读有关 g++ 函数的文档并从不同的 IDE 中学习,因为您很快就会发现您需要使用编译器做更高级的事情。

例如,要启用 c++14 的功能,我添加 -std=c++14

*已编辑以反映反馈。

【讨论】:

  • 我不知道 任何 C 编译器会产生“找不到命令”错误,因为 C 没有命令。所以我怀疑问题出在将程序提供给 C 编译器。
  • @rici:C 确实有命令,或者从 C89 开始就有,但出于某种奇怪的原因,没有使用术语。 C 源于 BCPL,其中命令在语法中也称为命令。命令只是一个不是声明的语句。我记得在 C89 中的一个显着区别是,在一个块中,声明必须在命令之前。在 C++ 中,块中允许任何顺序的语句和命令,但 C++ 翻译单元仅是声明序列:在该序列中不允许任何命令(即,您不能在命名空间范围内拥有命令)。
  • @Cheersandhth.-Alf:我在 C99 或 C11 中找到的“命令”一词的唯一用法是在第 7.22.4.8 节中,它描述了 system() 函数。 (...system 函数将string 指向的字符串传递给要执行的命令处理器...)。 (当前)标准中的语法称为 statements 语句,就像我所使用的 K&R 副本(第 2 版,1988 年)一样。所以我坚持我的声明(或者我的命令,如果你愿意的话:))。 C 派生自 BCPL,但它不是 BCPL。而且我非常怀疑 BCPL 编译器是否会发出“找不到命令”错误。
  • 'command not found' 是错误 OP 指定的错误,因此我使用了相同的术语。我只假设他可能正在使用 C 编译器。无论如何,我怀疑它是 OP 得到的实际错误,而是一个短手。
  • @avalon:我有理由确定 OP 引用了他得到的实际错误,尽管他们可能在开头缺少 bash:,这肯定会表明错误的根源。试试这个:bash -c "using namespace std;" 看看会产生什么错误信息。
猜你喜欢
  • 1970-01-01
  • 2012-01-28
  • 2015-02-13
  • 2013-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多