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
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
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? :-)
> 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.
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.
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.
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
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
> 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.
#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.
>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.
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.
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.
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...
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)
>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.