Forum: Compiler & IDEs Programm unter Windows mit GCC erstellen


von chris (Gast)


Lesenswert?

Hallo,

hat schon mal jemand versucht, ein C-Programm unter Windows mit dem GCC 
zu erstellen?
Was muss man installieren?
Ich habe aus dem Internet MinGW heruntergeladen. Der GCC lässt sich per 
Kommandozeile aufrufen, wenn ich etwas kompilierenn will, wird stdio.h 
nicht gefunden.

Gruß,
chris

von Peter (Gast)


Lesenswert?

dann suche doch mal ob stdio.h vorhanden ist und setze den include path 
passend.

Neugier:
Welchen grund gibt es den gcc für Windows zu verwenden?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

chris schrieb:

> hat schon mal jemand versucht, ein C-Programm unter Windows mit dem GCC
> zu erstellen?

Ja das geht.

> Ich habe aus dem Internet MinGW heruntergeladen. Der GCC lässt sich per
> Kommandozeile aufrufen, wenn ich etwas kompilierenn will, wird stdio.h
> nicht gefunden.

Mehr siehst du mit -v.

Ich hatte Code::Blocks installiert, und da ist GCC dabei. Verwende ich 
aber nur von der Commandline aus.

Johann

von Mark B. (markbrandis)


Lesenswert?

chris schrieb:
> Hallo,
>
> hat schon mal jemand versucht, ein C-Programm unter Windows mit dem GCC
> zu erstellen?

Ja. Mit Erfolg.

> Was muss man installieren?

Denn gcc selbst. Die glibc. Die w32api. Die binutils. GNU make.

> Ich habe aus dem Internet MinGW heruntergeladen. Der GCC lässt sich per
> Kommandozeile aufrufen, wenn ich etwas kompilierenn will, wird stdio.h
> nicht gefunden.

Fehlt da etwa die C Standard Library?
Die stdio.h müsste unter \MinGW\include zu finden sein.

> Neugier:
> Welchen grund gibt es den gcc für Windows zu verwenden?

Welchen Compiler denn sonst? :-)

von Peter (Gast)


Lesenswert?

> Welchen Compiler denn sonst? :-)
ich habe gehört das auch MS ein Compiler hat. Den kann man auch 
kostenlos laden und man auch auch das passende Windows zeug dabei.
(gilt nur wenn man auch x86 Code erzeugen will und nicht für Atmels 
o.ä.)

Es soll auch leute gegebn haben die versucht haben samba für windows zu 
bekommen.

von Mark B. (markbrandis)


Lesenswert?

Wenn man stets nur unter Windows entwickelt, klar, warum nicht.
Wenn man auch mal was schreibt was unter Linux oder aufm Mac laufen 
soll, bietet es sich halt an den gleichen Compiler auf den verschiedenen 
Plattformen einzusetzen.

von Klaus W. (mfgkw)


Lesenswert?

Oder zumindest einen, der sich an Standards hält.
Da ist MS ja nicht so stark, solange es nicht die eigenen
Standards sind (und selbst da eigentlich nicht).
Zumindest habe ich das bis VS2005 verfolgen dürfen; ob
es mit 2008 besser geworden ist, weiß ich nicht.

von chris (Gast)


Lesenswert?

Hallo Alle,

vielen Dank für eure Antworten. Es gibt zwei Gründe, warum ich GCC statt 
den Windoof Compiler verwenden möchte:

1. Ich kann Programme die auf allen Systemen AVR-,ARM,Linux,Windows 
laufen sollen ziemlich leicht portieren. Ich habe ein Programm 
geschrieben, welches auf einen Atmega32 läuft und war erstaunt, wie 
unkomplieziert es war, den selben Code auf einem ARM laufen zu lassen. 
Jetzt baue ich mir gereade den PC-Emulator dazu, deshalb GCC. Damit die 
in der Überzahl vorhanden Windows User nicht von dieser Wohltat 
ausgeschlossen werden, muss also MinGW her.

2. Ich hatte Visual C++ Express installiert und ... die stdio.h war 
nicht zu finden.

Also dachte ich mir, ich nutze MinGW, aber siehe da, auch dort kein 
stdio.h zu finden ( es liegt nicht am Pfad, ich habe nach der Datei auf 
dem Rechner gesucht, aber sie ist blos beim AVR-GCC zu finden ).

Was ich also wissen muss: in welchem Packet von MinGW ist die stdio.h? 
Es sind ja einige Packete zu installieren und vielleicht habe ich das 
mit der stdio.h vergessen.

Vielleicht hat mein Windows Rechner auch eine eingebaute stdio.h 
Unterdrückung eingebaut ...

.... könnt Ihr mir noch bei einer weiteren Frage helfen: wie schaffe ich 
es, dass ich eine Programm nicht in der Kommandshell starten muss um die 
Ausgabe zu sehen, sondern beim Klick auf das Programm die Kommandshell 
offen bleibt?

Vielen Dank für euere Hilfe,

chris

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

chris schrieb:

> 1. Ich kann Programme die auf allen Systemen AVR-,ARM,Linux,Windows
> laufen sollen ziemlich leicht portieren. Ich habe ein Programm
> geschrieben, welches auf einen Atmega32 läuft und war erstaunt, wie
> unkomplieziert es war, den selben Code auf einem ARM laufen zu lassen.
> Jetzt baue ich mir gereade den PC-Emulator dazu, deshalb GCC.

Das Argument ist nicht zu unterscätzen. Komplexe Algorithmen schreibe 
ich so, daß es sowohl für einen AVR als auch für PC übersetzbar ist aus 
der gleichen Quelle. Bei komplizierten Berechnungen oder massenweise 
Anfallenden Daten kann man diese dann sehr gut analysieren, 
visualisieren, etc. Mit einem Simulator geht das nicht, da wird man 
einfach von der Datenflut erschlagen und ist im AVR "eingesperrt", 
obwohl das Programm aufm PC läuft. Wenn schon PC, dann richtig!


> 2. Ich hatte Visual C++ Express installiert und ... die stdio.h war
> nicht zu finden.
>
> Also dachte ich mir, ich nutze MinGW, aber siehe da, auch dort kein
> stdio.h zu finden ( es liegt nicht am Pfad, ich habe nach der Datei auf
> dem Rechner gesucht, aber sie ist blos beim AVR-GCC zu finden ).
>
> Was ich also wissen muss: in welchem Packet von MinGW ist die stdio.h?
> Es sind ja einige Packete zu installieren und vielleicht habe ich das
> mit der stdio.h vergessen.

>>> MinGW, a contraction of "Minimalist GNU for Windows",
>>> is a port of the GNU Compiler Collection (GCC), and GNU Binutils,
>>> for use in the development of native Microsoft Windows applications.

Von libc/libm steht da nix.

Ich hab das wie gesagt mit Code::Blocks gelöst. In dem Moment Overkill, 
aber bei der dortigen MinGW-Distro ist dann alles dabei, und man kann 
sogar easy GUI-Anwendungen proggen wenn man das will.

Johann

von Peter (Gast)


Lesenswert?

> Ich kann Programme die auf allen Systemen AVR-,ARM,Linux,Windows
> laufen sollen ziemlich leicht portieren
Was hat das denn mit dem compiler zu tun. Ich verwende unter windows den 
MS compiler und unter linux den GCC, mal hat der eine eine bessere 
warnung mal der andere aber ich musste noch nie beim Programmieren auf 
den Compiler rücksicht nehmen, ich schreibe C++ und beiden Compiler 
nehmen es.

von chris (Gast)


Lesenswert?

gibt es

#include <inttypes.h>

bei MS?

von Sebastian (Gast)


Lesenswert?

Dev-C++.  MinGW + IDE, alles drin, anfängerfreundlich.

von Peter (Gast)


Lesenswert?

#include <inttypes.h>

nein gibt es nicht, ms hat dafür die typen _int32 _int64 usw.

Muss aber auch sagen das ich die speziellen type noch nie in einem 
normale PC-Programm verwendet haben, da nehme ich immer int. bzw size_t 
u.ä.

Das hat aber erstmal nicht mit dem compiler zu tun sondern mit der 
Umgebung. Das man da etwas anpassen muss ist selbstversändlich. Dafür 
hat MS ein sehr gute doku.

von chris (Gast)


Lesenswert?

>Muss aber auch sagen das ich die speziellen type noch nie in einem
>normale PC-Programm verwendet haben, da nehme ich immer int. bzw size_t
>u.ä.

Genau darum geht es. Wenn man Programme zwischen PC und Mikrocontroller 
austauschen will, braucht man die inttypes. Ohne sie zu programmieren 
ist bei Embedded Systemen imho Schrott.

von Mark B. (markbrandis)


Lesenswert?

chris schrieb:
> Was ich also wissen muss: in welchem Packet von MinGW ist die stdio.h?

Sie ist in dem Paket mingwrt-3.15.2-mingw32-dev.tar.gz enthalten.

von chris (Gast)


Lesenswert?

Vielen Dank, Mark.

Mittlerweile habe ich wie von Johann L. weiter ober vorgeschlagen 
"CodeBlocks" installiert.
Zwar habe ich wieder eine Stunde gebraucht, weil Code Blocks die Pfade 
zu MinGW in seinem Verzeichnis nicht richtig setzt und es etwas 
schwierig ist, in den tiefen der Menüs die Pfadeinstellung zu finden.

Jetzt läuft es und ich freue mich :-)

Allerdings gibt es wie immer einen Wehrmutstropfen: Wenn man mit printf 
etwas auf die Linux-Console ausgibt, kann man sogenannte 
"Escape"-Sequenzen benutzen, um die Farben und die Cursorpostion zu 
verändern. Eigentlich bin ich davon ausgegangen, dass das für die 
Windowskommandshell auch gilt. Leider scheint es nicht so zu sein, es 
erscheinen die Hiroglyphen der Escapesequenzen auf dem Bildschirm.

Was kann ich am besten tun? Ich möchte das Programm für Win- und Linux 
kompilieren und zwar möglichst ohne dass ich den Code ändern muss.

von Sven P. (Gast)


Lesenswert?

chris schrieb:

> Allerdings gibt es wie immer einen Wehrmutstropfen: Wenn man mit printf
> etwas auf die Linux-Console ausgibt, kann man sogenannte
> "Escape"-Sequenzen benutzen, um die Farben und die Cursorpostion zu
> verändern.
Deine Linux-Konsole ist ja auch ein vollwertiges 'Terminal'. Das ist für 
sowas gemacht.

> Eigentlich bin ich davon ausgegangen, dass das für die
> Windowskommandshell auch gilt.
Ne, das Windows-Dingen ist einfach nur Scheiße :->
Mit dem richtigen Dos-Prompt kann man auch Farben benutzen, das weiß ich 
noch aus TurboPascal-Zeiten. Ob das heute geht...wer weiß.

> Was kann ich am besten tun? Ich möchte das Programm für Win- und Linux
> kompilieren und zwar möglichst ohne dass ich den Code ändern muss.
Unter Linux benutzt du bitte ganz dringend eine Bibliothek, etwa 
ncurses oder termcap. Diese Steuersequenzen sind nämlich nicht 
unbedingt überall gleich; ncurses/termcap abstrahieren das ein wenig und 
verwenden automatisch die passenden Sequenzen.
Ncurses kann ansonsten auch noch einige nette Dinge...

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

chris schrieb:
> Vielen Dank, Mark.
>
> Mittlerweile habe ich wie von Johann L. weiter ober vorgeschlagen
> "CodeBlocks" installiert.
> Zwar habe ich wieder eine Stunde gebraucht, weil Code Blocks die Pfade
> zu MinGW in seinem Verzeichnis nicht richtig setzt und es etwas
> schwierig ist, in den tiefen der Menüs die Pfadeinstellung zu finden.

Pfade brauchst du eigentlich keine, du kannst GCC auch direkt aufrufen 
mit (absolutem) Pfad, zB bei mehreren parallelen Versionen auf dem 
System. Oder eben eintragen in die PATH-Variable irgendwo in
   Arbeitsplatz->Einstellungen->Erweitert->Umgebungsvariablen

> Allerdings gibt es wie immer einen Wehrmutstropfen: Wenn man mit printf
> etwas auf die Linux-Console ausgibt, kann man sogenannte
> "Escape"-Sequenzen benutzen, um die Farben und die Cursorpostion zu
> verändern. Eigentlich bin ich davon ausgegangen, dass das für die
> Windowskommandshell auch gilt. Leider scheint es nicht so zu sein, es
> erscheinen die Hiroglyphen der Escapesequenzen auf dem Bildschirm.

Das ist keine Sache des Compilers, sondern des Terminals. Wenn es das 
nicht darstellt, geht's eben nicht.

Da bringt's auch nicht, den printf-String per Syntax-Highloght rot zu 
machen, die Ausgabe wird trotzdem nicht rot fg.

> Was kann ich am besten tun?

Ein Terminal verwenden, das das kann oder auf so'n Schnickes verzichten 
oder (ohne Garantie)
1
#if defined(__WIN32__) || (defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__))

Johann

von chris (Gast)


Lesenswert?

>Das ist keine Sache des Compilers, sondern des Terminals. Wenn es das
>nicht darstellt, geht's eben nicht.

Das war ja auch nicht die Frage.

>Ein Terminal verwenden, das das kann oder auf so'n Schnickes verzichten

Echt? Dann versuch mal den Norten Commander ohne diesen "Schnickes" zu 
programmieren.

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.