Ошибка запуска компилятора g ++ «g ++: error: spawn: ошибка формата Exec»

0

Я написал программу C++ в Linux, и я использовал заголовки Linux, такие как unistd.h. теперь я должен скомпилировать его для Windows, и я использовал Cygwin with g++.

но, как видно из Изображение 174551, он компилируется один раз, и когда я снова компилирую его, это ошибки " g++: error: spawn: Exec format error "

почему это происходит и что я должен делать для его исправления?

ps: g++ myfile.cpp -v:

Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.7.3/lto-wrapper.exe
Target: i686-pc-cygwin
Configured with: /cygdrive/i/szsz/git/cygwin-ports-gcc/gcc-4.7.3-1/src/gcc-4.7.3/configure --srcdir=/cygdrive/i/szsz/git/cygwin-ports-gcc/gcc-4.7.3-1/src/gcc-4.7.3 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --datarootdir=/usr/share --docdir=/usr/share/doc/gcc -C --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-pc-cygwin --without-libiconv-prefix --without-libintl-prefix --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --enable-bootstrap --disable-__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-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-ppl --with-system-zlib : (reconfigured) /cygdrive/i/szsz/git/cygwin-ports-gcc/gcc-4.7.3-1/src/gcc-4.7.3/configure --srcdir=/cygdrive/i/szsz/git/cygwin-ports-gcc/gcc-4.7.3-1/src/gcc-4.7.3 --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --libexecdir=/usr/lib --datadir=/usr/share --localstatedir=/var --sysconfdir=/etc --datarootdir=/usr/share --docdir=/usr/share/doc/gcc -C --build=i686-pc-cygwin --host=i686-pc-cygwin --target=i686-pc-cygwin --without-libiconv-prefix --without-libintl-prefix --enable-shared --enable-shared-libgcc --enable-static --enable-version-specific-runtime-libs --enable-bootstrap --disable-__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-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-ppl --with-system-zlib
Thread model: posix
gcc version 4.7.3 (GCC)
COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=i686'
 /usr/lib/gcc/i686-pc-cygwin/4.7.3/cc1plus.exe -quiet -v -D__CYGWIN32__ -D__CYGWIN__ -Dunix -D__unix__ -D__unix -idirafter /usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../../include/w32api -idirafter ../../include/w32api tro_client.cpp -quiet -dumpbase tro_client.cpp -mtune=generic -march=i686 -auxbase tro_client -version -o /tmp/ccDDULRP.s
GNU C++ (GCC) version 4.7.3 (i686-pc-cygwin)
        compiled by GNU C version 4.7.3, GMP version 4.3.2, MPFR version 3.0.1-p4, MPC version 1.0.1
warning: MPFR header version 3.0.1-p4 differs from library version 3.1.2.
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32696
ignoring nonexistent directory "/usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../../i686-pc-cygwin/include"
ignoring nonexistent directory "../../include/w32api"
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib/gcc/i686-pc-cygwin/4.7.3/include/c++
 /usr/lib/gcc/i686-pc-cygwin/4.7.3/include/c++/i686-pc-cygwin
 /usr/lib/gcc/i686-pc-cygwin/4.7.3/include/c++/backward
 /usr/lib/gcc/i686-pc-cygwin/4.7.3/include
 /usr/local/include
 /usr/lib/gcc/i686-pc-cygwin/4.7.3/include-fixed
 /usr/include
 /usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../../include/w32api
End of search list.
GNU C++ (GCC) version 4.7.3 (i686-pc-cygwin)
        compiled by GNU C version 4.7.3, GMP version 4.3.2, MPFR version 3.0.1-p4, MPC version 1.0.1
warning: MPFR header version 3.0.1-p4 differs from library version 3.1.2.
GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32696
Compiler executable checksum: 32d481c3b6460a57b566c5b2698c9e31
COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=i686'
 /usr/lib/gcc/i686-pc-cygwin/4.7.3/../../../../i686-pc-cygwin/bin/as.exe -v -o /tmp/cc0pZbht.o /tmp/ccDDULRP.s
g++: error: spawn: Exec format error
  • 0
    возможный дубликат ошибки компилятора g ++ "g ++: error: spawn: ошибка формата Exec"
  • 0
    да, вы правы, извините, я автор обоих, я новичок здесь, и я не мог редактировать другой. (Я думаю, что это потому, что это было приостановлено.) Я думаю, что это более ясно, чем другие.
Показать ещё 6 комментариев
Теги:
cross-platform
g++
cygwin

1 ответ

0

Сегодня я наткнулся на ту же проблему - и придумал какое-то эзотерическое решение, которое я собираюсь добавить для справки здесь.

В моем случае проблема заключается в том, что цепочка инструментов компилятора - 64-разрядная cygwin gcc - должна быть проверена в системе контроля версий. К сожалению, этот RCS не только вмешивается в концы строк, но и удаляет атрибуты файлов. В моем случае атрибут файла S (System) отсутствовал для файла as.exe (в моем случае он находится в папке aarch64-unknown-elf).

Первоначально атрибут S не был установлен для as.exe:

C:\gccInstallDir\arm\v8hf\aarch64-unknown-elf\bin>attrib as.exe
A            C:\gccInstallDir\arm\v8hf\aarch64-unknown-elf\bin\as.exe

и при попытке скомпилировать в Windows 7 64-бит я получаю:

arm_v8hf-gcc: error: spawn: Exec format error

Но с набором атрибутов:

C:\gccInstallDir\arm\v8hf\aarch64-unknown-elf\bin>attrib +S as.exe
C:\gccInstallDir\arm\v8hf\aarch64-unknown-elf\bin>attrib as.exe
A  S         C:\gccInstallDir\arm\v8hf\aarch64-unknown-elf\bin\as.exe

Сборник отлично работает!

Я не знаю, почему as.exe должен быть системным файлом, но когда я пытаюсь вызвать as.exe из командной строки, я получаю сообщение о том, что as.exe несовместим с текущей версией Windows.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню