当其他编译器没有时,MinGW gcc 会出错
Posted
技术标签:
【中文标题】当其他编译器没有时,MinGW gcc 会出错【英文标题】:MinGW gcc gives errors when other compilers do not 【发布时间】:2016-10-27 23:34:48 【问题描述】:在你问之前,是的,我已经查了好几天了。我完全卡住了...我正在使用 MINGW32(我的快捷方式是 MSYS)来编译我的 c 和 cpp 代码。大约 2 或 3 天以来,我一直收到奇怪的错误。 (下)它以前工作得很好。我什至运行了我之前编译的相同代码,它给出了相同的错误。然后我进入 DevC++ 并打开然后编译它就可以了。
错误:
命名空间:找不到命令
使用:找不到命令
语法错误: int main()
(有时它会给我带来难以理解的混乱)
我真的卡住了...我不想切换到 DevC++...我喜欢使用自己的文本编辑器并在命令行中编译。
【问题讨论】:
抱歉,这是我第一次在这样的帖子上发帖。我在这里阅读了很多对我有帮助的东西,所以我决定问... 请张贴“无法阅读的大烂摊子”。以及您的实际程序。如果没有看到该程序,不确定我们将如何帮助您。 我打赌你运行的是 gcc 而不是 g++。另外,这个问题与 IDE 无关,所以你关于 DevC++ 的观点毫无意义。 发布最简单的可能导致错误的完整程序 “找不到命令”错误表明您实际上是在尝试将 C++ 程序作为 shell 脚本运行。如果这不是正在发生的事情(或者如果这不能帮助您弄清楚发生了什么),请将您正在编译的代码缩减为一个仍然显示相同错误的小程序,请将该代码与您的确切命令一起发布 用于编译它和确切的错误消息(使用复制/粘贴)。 【参考方案1】:根据您的错误 namespace: command not found
和 using: 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;
" 看看会产生什么错误信息。以上是关于当其他编译器没有时,MinGW gcc 会出错的主要内容,如果未能解决你的问题,请参考以下文章
eclipse+mingw 编译c++出错,请大神门帮我看看!!!
如何将使用sysioctl.h的代码移植到MinGW gcc中?