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
提供类似于上述报告的报告。
答案 0 :(得分:3)
我遇到了类似的问题(并开始了赏金计划),但现在设法通过重新安装Cygwin解决了自己的问题。 @CristiFati在要求澄清版本的问题上添加了评论,但具有讽刺意味的是,添加了赏金后,我的声誉不足,无法回复-因此,我不得不在这里回答。
Cygwin设置用于更新系统并安装GCC软件包(通过添加软件包“ gcc-objc ++”),因为在没有GCC支持的情况下安装了原始Cygwin。但是,此安装是在有多个用户以受限特权运行的系统上。我相信这会干扰升级,并导致某些用户无法访问某些文件,因此GCC的安装已损坏。
行为是成功的编译工作并产生了正确的目标文件,但是任何错误都将无提示地失败,没有输出并且没有错误消息(但退出状态为“ 1”)。
解决方案是完全删除Cygwin,然后以我自己的用户身份重新安装。这样可以确保权限正确无误,因此安装/升级可以正确升级所有文件,并且GCC编译和错误报告现在可以按预期工作。
总结:
答案 1 :(得分:1)
我不确定您是否只对拥有一个工作系统感兴趣(在这种情况下,您可以简单地重新安装Cygwin,可能是较新的版本), 或确定法医,即确定问题的原因。
对于第二个目标,您可以做的一件事情是隔离从hello.c到hello.exe的3个阶段:
预处理(使用-v
进行详细说明)
gcc -E hello.c -v -o hello.i
编译
gcc -c hello.c -v -o hello.o
(或者您也可以编译hello.i)
链接
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。