使用最近的Cygwin版本在C中没有生成exe文件

时间:2015-04-18 22:53:53

标签: c windows gcc cygwin

GCC 4.9.2不会创建可执行文件,a.out-o hello.exe。将-v添加到编译行表示-o已切换到不存在的临时文件,例如:-o /tmp/ccr6nMlO.s

最近几个月在Windows XP和Windows 7上安装的Cygwin NT-6.1都无法生成可执行文件。我在一台可以完美运行的旧笔记本电脑上找到了Cygwin 1.7.3。

是否更改了编译标志或其语法?此命令无法生成可执行文件:

gcc hello.c -o hello.exe

这是我的版本。我以为它来自Cygwin镜子。 $ uname -a给出了

CYGWIN_NT-6.1-WOW Gary-PC 1.7.35(0.287/5/3) 2015-03-04 12:07 i686

这是一个编译示例:

$ gcc hello.c -o hello.exe

echo $?返回1,不予置评。所以编译器失败了。

编译任何代码的所有尝试都无法在当前目录中生成任何内容,并且不会报告任何错误或警告。 ctgcheck -c bash binutils bzip2 cygwin gcc-core gcc-g++ gzip m4 make unzip zip表示已安装所有内容:

Cygwin Package Information
Package              Version        Status
bash                 4.3.33-1       OK
binutils             2.25-1         OK
bzip2                1.0.6-2        OK
cygwin               1.7.35-1       OK
gcc-core             4.9.2-3        OK
gcc-g++              4.9.2-3        OK
gzip                 1.6-1          OK
m4                   1.4.17-1       OK
make                 4.1-1          OK
unzip                6.0-14         OK

使用-v进行编译会显示此报告:

$ gcc hello.c -o hello.exe -v

Using built-in specs. 
COLLECT_GCC=gcc 
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.9.2/lto-wrapper.exe 
Target: i686-pc-cygwin 
Configured with: /cygdrive/i/szsz/tmpp/gcc/gcc-4.9.2-3.i686/src/gcc-4.9.2/configure --srcdir=/cygdrive/i/szsz/tmpp/gcc/gcc-4.9.2-3.i686/src/gcc-4.9.2 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/libexec --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --libdir=/usr/lib --datarootdir=/usr/share --docdir=/usr/share/doc/gcc --htmldir=/usr/share/doc/gcc/html -C --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-pc-cygwin --without-libiconv-prefix --without-libintl-prefix --libexecdir=/usr/lib --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --enable-bootstrap --enable-__cxa_atexit --with-dwarf2 --with-arch=i686 --with-tune=generic --disable-sjlj-exceptions --enable-languages=ada,c,c++,fortran,java,lto,objc,obj-c++ --enable-graphite --enable-threads=posix --enable-libatomic --enable-libgomp --disable-libitm --enable-libquadmath --enable-libquadmath-support --enable-libssp --enable-libada --enable-libjava --enable-libgcj-sublibs --disable-java-awt --disable-symvers --with-ecj-jar=/usr/share/java/ecj.jar --with-gnu-ld --with-gnu-as --with-cloog-include=/usr/include/cloog-isl --without-libiconv-prefix --without-libintl-prefix --with-system-zlib --enable-linker-build-id 
Thread model: posix gcc version 4.9.2 (GCC) 
COLLECT_GCC_OPTIONS='-o' 'hello.exe' '-v' '-mtune=generic' '-march=i686' /usr/lib/gcc/i686-pc-cygwin/4.9.2/cc1.exe -quiet -v -Dunix -idirafter /usr/lib/gcc/i686-pc-cygwin/4.9.2/../../../../include/w32api -idirafter /usr/lib/gcc/i686-pc-cygwin/4.9.2/../../../../i686-pc-cygwin/lib/../../include/w32api hello.c -quiet -dumpbase hello.c -mtune=generic -march=i686 -auxbase hello -version -o /tmp/cc8W4cOy.s

我还在Windows XP上安装了Cygwin,报告了此版本:CYGWIN_NT-5.1 lt-love6 1.7.35(0.287/5/3) 2015-03-04 12:07 i686 Cygwin

hello.c的编译结果是相同的。没有可执行文件,$?=1表示编译失败。此外,没有报告错误或警告。使用-v提供类似于上述报告的报告。

4 个答案:

答案 0 :(得分:3)

我遇到了类似的问题(并开始了赏金计划),但现在设法通过重新安装Cygwin解决了自己的问题。 @CristiFati在要求澄清版本的问题上添加了评论,但具有讽刺意味的是,添加了赏金后,我的声誉不足,无法回复-因此,我不得不在这里回答。

Cygwin设置用于更新系统并安装GCC软件包(通过添加软件包“ gcc-objc ++”),因为在没有GCC支持的情况下安装了原始Cygwin。但是,此安装是在有多个用户以受限特权运行的系统上。我相信这会干扰升级,并导致某些用户无法访问某些文件,因此GCC的安装已损坏。

行为是成功的编译工作并产生了正确的目标文件,但是任何错误都将无提示地失败,没有输出并且没有错误消息(但退出状态为“ 1”)。

解决方案是完全删除Cygwin,然后以我自己的用户身份重新安装。这样可以确保权限正确无误,因此安装/升级可以正确升级所有文件,并且GCC编译和错误报告现在可以按预期工作。

总结

  • 不正确的Windows权限导致软件包安装问题。

答案 1 :(得分:1)

我不确定您是否只对拥有一个工作系统感兴趣(在这种情况下,您可以简单地重新安装Cygwin,可能是较新的版本), 或确定法医,即确定问题的原因。

对于第二个目标,您可以做的一件事情是隔离从hello.c到hello.exe的3个阶段:

  1. 预处理(使用-v进行详细说明)

    gcc -E hello.c -v -o hello.i
    
  2. 编译

    gcc -c hello.c -v -o hello.o
    

(或者您也可以编译hello.i)

  1. 链接

    gcc hello.o -v -o hello.exe
    

,然后首先检查三个中哪个失败。 这可以为您提供可能的故障根源的线索。

PS:我无法重现您的问题

$ uname -a
MSYS_NT-10.0-WOW P522806 2.11.2(0.329/5/3) 2018-11-26 08:59 i686 Msys

$ gcc --version
gcc.exe (Rev3, Built by MSYS2 project) 8.2.0
Copyright (C) 2018 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.

答案 2 :(得分:0)

根据我使用的,在Cygwin终端中的一个简单的GCC命令为

$ gcc filename.c

生成输出文件" a"。您可以按如下方式运行它:

$ ./a

希望它有所帮助。

答案 3 :(得分:0)

我也遇到过类似的问题。 此问题可能是由于使用了不兼容的cygwin DLL版本。 使用Windows开始->查找/搜索工具搜索cygwin1.dll 并删除除最新版本以外的所有版本。最新版本应该 驻留在x:\ cygwin \ bin中,其中“ x”是您拥有的驱动器 安装了cygwin发行版。如果您也建议重新启动 无法找到另一个cygwin DLL。