CMD中无法使用GCC编译C程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMD中无法使用GCC编译C程序相关的知识,希望对你有一定的参考价值。

使用的是MinGW提供的GCC,环境变量里面设置好了
前一阵子还能用,有一天突然一旦打开CMD使用gcc命令就显示 'gcc.exe'不是内部或外部命令,也不是可运行的程序或批处理文件。
如果在运行里输入gcc 或者 gcc -v在一闪而过的cmd窗口中能看到正常的信息
在出现这个问题之前只是安装过一次JDK,在cmd中除了gcc以外,其他MinGW内的编译器也无法正常使用,症状与GCC相同
codeblocks等IDE我用起来不太方便,没有notepad++和gcc一起用启动起来快,所以希望能有高手教我解决编译器的问题

参考技术A 应该是环境变量被改动了吧?!
先看一下gcc.exe是不是还在,如果不能在系统中找到它,则说明,这个程序被删除了
如果能找到,则在系统中增加环境变量,检查PATH中是不是少了这个文件所在的路径。追问

麻烦您看下楼下那张图,环境变量设置确实没问题,而且MinGW应该也没损坏

追答

不好意思,刚才忙,没顾上,解决问题就好!你那环境变量也太乱套了吧,呵呵,最好清理一下。

参考技术B 1、CMD用管理员执行,环境变量通过我的电脑属性改了之后,CMD窗口需要重新启动才有效果
2、在当前CMD窗口查看PATH变量(echo %PATH%)看一下有没有MinGW的路径
一般都是上面2个方法就可以了,再不然就是你的MinGW受到损坏,被删除了追问

追答

PATH里面;C:\MinGW\bin前面的;是中文的吧,PATH的;要是英文的,检查一下所有的分号,都改成英文的

参考技术C 有兴趣玩玩msys+gcc+vim吗?追问

我就是gcc用不了了

追答

如果之前加了环境变量却用不了,可能PATH又被改了,再改回去吧。不过我想这次,像edit、regedit这些命令都用不了……你上官网重装一下吧,那里像msys、gcc、vim、ssh、iconv这些东西都有了的,钩两下就行了,环境变量什么的都设好了,很方便,熟悉一下Unix环境。

追问

regedit,msconfig之类的全都能用,麻烦您看下楼上那张图片,环境变量设置应该没问题

追答

你是否可以把分号后的空格删了?或把C:\MinGW\bin;提前?

追问

提前就行了!谢谢

追答

仍然觉得可能是分号后出现空格的原因,虽然解决了,但未彻底吧。

本回答被提问者采纳

使用gcc -std = c ++ 11时,为什么Cygwin中的某些系统函数未定义?

程序无法使用gcc -std=c++11在Cygwin中编译。标头编译好(除非像boost / asio.hpp一样,他们尝试使用缺少的定义)。现在,因为Cygwin的#ifdef宏绕过了c ++ 11环境中的一些函数定义,所以程序可能不会。当在Fedora Linux上类似地编译相同的源文件时,不会发生这种情况。

此示例程序无法使用gcc -std = c ++ 11选项进行编译:

#include <boost/asio.hpp>
int main() { return 0; }

我第一次遇到这个问题是发现上面的程序没有编译,然后在使用更新的标准重新编译现有代码时发现了更多类似的问题。

回复中列出了我发现破坏的包含部分。

[编辑纠正错别字。]

答案

这是在Cygwin包含库更新之前可以使用的解决方法:

在您的源代码中,包括

#define _GNU_SOURCE

在任何其他包括之前。 Fedora Linux中不需要此解决方法,仅在Cygwin环境中,然后仅使用-std =编译器选项。

这个修复:

#include <boost/asio.hpp> // (Because it uses sigfillset from sys/signal.h)
#include <sys/signal.h>   // sigfillset and others declared nearby
#include <sys/types.h>    // u_int and other __MISC_VISIBLE typedefs
#include <stdio.h>        // at least fileno
#include <string.h>       // at least strdup

可能还有其他一些我没有发现的故障。这也可以通过简单修改/usr/include/sys/features.h,添加来解决

#ifndef _GNU_SOURCE // LOCAL WORK-AROUND
#define _GNU_SOURCE
#endif

靠近文件的开头。虽然这适用于休闲图书馆用户,但它不是Cygwin开发人员将使用的方法。

另一答案

使用-std=gnu++11代替-std=c++11和Cygwin。

有了Cygwin我发现-std=c++11似乎排除了GNU扩展并导致Boost和POSIX标题出现各种问题。

以上是关于CMD中无法使用GCC编译C程序的主要内容,如果未能解决你的问题,请参考以下文章

Eclipse中NDK无法编译(哪怕是一个新建的空白项目)

cmd调用gcc编译运行c语言后,c语言会再产生一个窗口显示结果,如何将这些内容显示在cmd命令窗口中?

无法在 gcc (OS X) 上使用 curses 编译)

如何在cmd中编译命名运行c程序

C ++程序无法编译[重复]

GCC 无法在 64 位编译 C 程序