Forum: Compiler & IDEs cc1 erzeugt kein Binary


von Sigint 112 (sigint)


Lesenswert?

Hallo zusammen,
   ich habe Cygwin und eben die Pakete mit dem Installer aktualisiert. 
Jetzt hab ich gcc-4.9.2
Ich hab gerade versucht ein Testprogramm für i686-pc-cygwin zu 
compilieren, aber bekomme keine Binärdatei. Es sieht so aus, als würde 
cc1 einfach keine Datei erzeugen, und ich hab keine Ahnung wieso.
1
$ gcc test.c -v
2
Es werden eingebaute Spezifikationen verwendet.
3
COLLECT_GCC=gcc
4
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-pc-cygwin/4.9.2/lto-wrapper.exe
5
Ziel: i686-pc-cygwin
6
Konfiguriert mit: /cygdrive/i/szsz/tmpp/gcc/gcc-4.9.2-1.i686/src/gcc-4.9.2/configure --srcdir=/cygdrive/i/szsz/tmpp/gcc/gcc-4.9.2-1.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
7
Thread-Modell: posix
8
gcc-Version 4.9.2 (GCC)
9
COLLECT_GCC_OPTIONS='-v' '-mtune=generic' '-march=i686'
10
 /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 test.c -quiet -dumpbase test.c -mtune=generic -march=i686 -auxbase test -version -o /cygdrive/c/DOKUME~1/SIGINT/LOKALE~1/Temp/ccVSilvJ.s

Die Datei "ccVSilvJ.s" wird nicht erzeugt.
Hat jemand ne Idee, was hier schief läuft. Die Websuche hat mir leider 
nichts gebracht.
Vielen Dank für euere Tipps.

Gruß,
   SIGINT

von Ahab (Gast)


Lesenswert?

Sigint 112 schrieb:
> Die Datei "ccVSilvJ.s" wird nicht erzeugt.

Wird die sicher nicht erzeugt, oder nur, so wie vorgesehen, innerhalb 
von Sekundenbruchteilen wieder gelöscht, sobald sie nicht mehr gebraucht 
wird?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Sigint 112 schrieb:
> Es sieht so aus, als würde cc1 einfach keine Datei
> erzeugen, und ich hab keine Ahnung wieso.

> $ gcc test.c -v

1) Deine Ausgabe ist nicht komplett; nach cc1 werden noch as und ld 
aufgerufen.

2) Du hast keinen Name für die Ausgabedatei (Executable) angegeben. 
Default ist a.out oder a.exe unter Windos.

3) cc1 erzeugt keine Executables.  cc1 ist i.W. ein 
Text-Text-Transformatoer (C nach Assembler).

> Die Datei "ccVSilvJ.s" wird nicht erzeugt.

4) Wenn dir die Assembler-Ausgabe des Compilers am Herzen liegt dann 
verwende -save-temps oder lasse lediglich mit -S compilieren. 
Assembliere / Linken kannst du dann in darauf folgenden Schritt(en) 
erledigen.

von Sigint 112 (sigint)


Lesenswert?

@Ahab: Ich hab cc1 nachher auch noch von Hand aufgerufen und es wird 
leider keine Datei erzeugt. Es gibt keine einzige Meldung, auch wenn ich 
"-quiet" entferne.

@Johann: 1) Doch, die Ausgabe ist vollständig. As und ld werden nicht 
aufgerufen. Ich hab keine Ahnung, wieso.

2) Das ist mir bekannt. Es wird aber nichts erzeugt.

3) Das wusste ich vorher nicht, war mir aber auf Grund der Dateiendung 
klar.
   Als nächster Schritt müsste ja as und dann ld folgen... da kommt aber 
nichts. :-(

4)Mir geht es nicht um die Assemblerdatei. Ich möchte mit "-v" nur 
verstehen, wieso kein Binary erzeugt wird. Für mich sieht es so aus, als 
würde cc1 kein Assemblerfile erzeugen und deshalb as nicht gestartet.
Leider bin ich kein gcc Fachmann, deshalb komme ich hier nicht weiter.
Deine Tipps haben auch nichts gebraucht. Weder "-save-temps" noch "-S" 
haben etwas geändert.
1
$ ldd /usr/lib/gcc/i686-pc-cygwin/4.9.2/cc1.exe
2
        ntdll.dll => /cygdrive/c/WINDOWS/system32/ntdll.dll (0x7c910000)
3
        kernel32.dll => /cygdrive/c/WINDOWS/system32/kernel32.dll (0x7c800000)
4
        cygcloog-isl-4.dll => /usr/bin/cygcloog-isl-4.dll (0x6ff20000)
5
        cygwin1.dll => /usr/bin/cygwin1.dll (0x61000000)
6
        cygisl-10.dll => /usr/bin/cygisl-10.dll (0x6e220000)
7
        cyggmp-10.dll => /usr/bin/cyggmp-10.dll (0x6eb00000)
8
        cygiconv-2.dll => /usr/bin/cygiconv-2.dll (0x6e570000)
9
        cygintl-8.dll => /usr/local/bin/cygintl-8.dll (0x6f5c0000)

Gruß,
  SIGINT

von Markus F. (mfro)


Lesenswert?

Sigint 112 schrieb:
> /cygdrive/c/DOKUME~1/SIGINT/LOKALE~1/Temp/ccVSilvJ.s

Hast Du auch tatsächlich da nachgesehen?

Mit cygwin habe ich keine Erfahrung bzw. nur "antike". Damals hatte es 
Probleme mit Pfaden, die Leerzeichen enthielten. Deine scheinen das ja 
zu tun...

von Jim M. (turboj)


Lesenswert?

Ich vermisse jegliche weitere Fehlermeldung.
1
$ gcc test.c -v

Übrigens: Übersetzen geht nur ohne das "-v", mit diesem Parameter werden 
nur Informationen vom gcc angezeigt.

Übersetzen geht so:
1
$ gcc -o test1.exe test.c

"test" ist ein schlechter Name, den gibt es unter Linux als Kommando, 
deswegen besser "test1".

von Sigint 112 (sigint)


Lesenswert?

So, hab was neues herausgefunden:

Wenn ich "cc1.exe --help" in cygwin starte, dann passiert nichts. Wenn 
ich das aber in einem DOS-Fenster starte, dann bekomme ich die 
Hilfeseite angezeigt, so wie es sein soll.

Das ist alles sehr komisch.

Gruß,
  SIGINT

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Jim Meba schrieb:
> Ich vermisse jegliche weitere Fehlermeldung.
1
> $ gcc test.c -v
2
>
> Übrigens: Übersetzen geht nur ohne das "-v", mit diesem Parameter werden
> nur Informationen vom gcc angezeigt.

Nein, das stimmt nicht.

> Übersetzen geht so:
1
> $ gcc -o test1.exe test.c

Ebenso geht
1
$ gcc -v -o test1.exe test.c
allerdings mit ziemlich viel Geplapper.

von Sigint 112 (sigint)


Lesenswert?

So, ich hab jetzt Cygwin einfach neu installiert.
Jetzt geht alles. Leider sind jetzt alle "von Hand" installierten Pakete 
und libs weg. :-(

Gruß,
  SIGINT

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.