Logo

CYBOI under Windows

Teodora Kikova
<teodora.kikova@stud.tu-ilmenau.de>

Aufgabestellung

CYBOI (Interpreter Programm, in der Sprache C geschrieben) unter Windows zum Laufen zu bringen,

     konkret:

          -    Batch Files für die Compilierung schreiben und GNU gcc verwenden

          -    Windows Funktionen zum Zeichnen von GUIs in den CYBOI hinzufügen

 

     Dafür braucht man:

-         CVS (Concurrent Versions System) Client

Quellen

1.     cyboi-source.tar.bz2    F http://developer.berlios.de/project/showfiles.php?group_id=669

2.     exclude.txt

3.          Makefile.txt

4.          od. src.zip (Source ohne X11-Bibliotheck) und admin.zip (Makefile.txt und exclude.txtohne X11-Bibliotheck)

Projektliste:       mailto:cybop-developers@lists.berlios.de

Projektplan:       http://cybop.berlios.de/plan/0_3_0_0/features.html

Bug-Reports:    http://developer.berlios.de/bugs/?group_id=669

                                 http://developer.berlios.de/bugs/?func=addbug&group_id=669

Programm unter Linux starten

     Das Programm macht weiter nichts, als sich selbst wieder zu beenden.

     CYBOL Dateien braucht man nicht; diese können noch nicht gelesen werden.

Unter Linux wird das Programm mit folgendem Befehl gestartet:

              cyboi exit

     In der Linux Shell sieht das z.B. so aus:

              christian@chris:~/tmp/admin$ ../bin/cyboi exit

              wait i: 0

              wait s: 134581736

              wait p: 0

wait a: 134555664

wait astr: operation

wait as: 9

TEST param0: exit

TEST param0s: 4

Wenn man das Programm ohne "exit" Parameter startet, sieht das so aus:

christian@chris:~/tmp/bin$ ./cyboi

Usage: cyboi signal

Example: cyboi cybop.sample.hello_world.dynamics.startup

Loesung der Aufgabe

1.      Mögliche Compiler für die Lösung unter Windows

      1    Es gibt DJGPP  è gcc - Compiler für Dos

Ä     DJGPP is a complete 32-bit C/C++ development system for Intel 80386 (and higher) PCs running DOS. It includes ports of many GNU development utilities. The development tools require a 80386 or newer computer to run, as do the programs they produce. In most cases, the programs it produces can be sold commercially without license or royalties.

Ä      You cannot install GCC by itself on MSDOS; it will not compile under any MSDOS compiler except itself. You need to get the complete compilation package DJGPP, which includes binaries as well as sources, and includes all the necessary compilation tools and libraries.

http://www.mathematik.uni-ulm.de/sai/ws00/soft/gccwin/gccwindos.html

http://www.delorie.com/djgpp/

      2    MinGW è gcc-Compiler für Windows, oder Umgebung MSyst;                              dies ist etwa das gleiche wie MinGW, nur etwas kompakter, d.h. eine                kürzere Version davon.

Ä     MinGW ("Minimalistic GNU for Windows")

MinGW basiert auf dem populären Gnu-Compiler GCC, erweitert um eine Reihe von Header- und Include-Dateien um native Windows-Applikationen erstellen zu können.

Ä     MinGW besteht aus eine Ansammlung von Header Files und Import

Libraries welche es ermöglichen GCC zu benutzen um Windows

Programme zu erstellen. Im gegensatz zu Cygwin wird keine Dll

benötigt. Die verfügbaren Tool umfassen aktuell die GNU Compiler

Collection (GCC), GNU Binary Utilities (Binutils), GNU debugger (Gdb), GNU make, und noch einiges mehr. (Siehe Homepage)

Ä     Early in 2002 the MinGW team delivered a package they had dubbed MSYS. This is a Minimal SYStem providing a self hosted mingw32 target POSIX style environment. The updates to this package and it's utilities are more controlled as the entire package (which uses subsets of many smaller packages) is considered to be one package. This package is also delivered in a Win32 style setup installation binary for better control of the installation.

 

https://prodigy.informatik.uni-tuebingen.de/Info1-WS02/software_gcc_win.html

http://www.google.de/search?q=cache:4CVjb5mLzJwJ:www.trivadis.ch/Images/externprozedur_de_tcm10-5278.pdf+gcc+unter+Windows&hl=de&lr=lang_de&ie=UTF-8

http://wikibooks.org/wiki/Programmierkurs_C-Plusplus:_Informationen_zu_verschiedenen_Compilern

http://www.smial.de/mingw/

 

      3    gcc mit Cygwin

Ä     Cygwin is a Linux-like environment for Windows. It consists of two

parts:

è A DLL (cygwin1.dll) which acts as a Linux emulation layer providing substantial Linux API functionality.

è A collection of tools, which provide Linux look and feel.

Ä     The Cygwin DLL works with all non-beta, non "release candidate", ix86 32 bit versions of Windows since Windows 95, with the exception of Windows CE.

 

Ä Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want to get it running on Windows. Cygwin is not a way to magically make native Windows apps aware of UNIX functionality, like signals, ptys, etc. Again, you need to build your apps from source if you want to take advantage of Cygwin functionality.

http://cygwin.com/ml/cygwin/

http://tutorials.tanmar.de/cygwin.php

http://tutorials.tanmar.de/cygwin_lokal.php

http://www.pl-berichte.de/t_system/cygwin.html

http://www.manpage.ch/cygwin.html

http://www.uni-giessen.de/hrz/software/cygwin/xfree86/install-anleit.html

http://www.tu-freiberg.de/urz/anleitungen/cygwin/cygwin.html

http://www.pl-berichte.de/t_system/print/cygwin.html

http://www.kfa-juelich.de/zam/docs/tki/tki_html/t0375/t0375.html

 

a Informationen zu GCC (gcc und g++):

http://www.uni-bayreuth.de/departments/math/serv/cip/prog/gcc_compiler.html

http://www.gnu.org/directory/GNU/gcc.html

http://members.surfeu.de/matthias.prinke/computers/misc.html

http://www.uni-bayreuth.de/departments/math/serv/cip/prog/gcc_compiler.html

http://www.plt.rwth-aachen.de/ov/cygwin.html

 

2.      Entscheidung welche Compiler-Lösung für die Aufgabe am besten passt, durchgeführte Tests, begleitende Probleme

F Ich habe erst mal DJGPP (mit gcc 2.95) heruntergeladen und installiert.
1. Problem: Das Programm benutzt X11 Bibliothek, die nur unter Linux zu finden sind, d.h. das Kompilieren war nicht möglich.

2. Problem: Wenn man dann den Source ohne X-11-Bibliotheck nimmt, dann hat der Compiler Problem mit den Source-Dateien, weil diese mit gcc 3.3 unter Linux kompiliert worden sind. Das Kompilieren ist mir wieder nicht gelungen, da eine lange Reihe von Fehlern aufgetreten ist. Ich habe manche davon geprüft, weil ich ungefähr sehen wollte, wo das Problem liegt. Es hat sich festgestellt, dass die meisten Fehlermeldungen von der Quellkode kommen.

Der Compiler (Version 2.95 gcc-Dos) kann nicht mit dem Source umgehen, da die Variablendeklarationen auch nach dem Aufruf von Funktionen gemacht worden sind. Es gibt auch andere Fehlermeldungen, aber die oben genannte kommt am häufigsten vor, d.h. es müssen dann alle Quellkode-Dateien verändert werden und dies ist nicht so praktisch und zeitaufwendig.

Das Programm ist wirklich rein Funktional, aber benutzt teilweise den Syntax von c++. Die Kommentare sind wie bei c++ mit "//" definiert und die Variablendeklarationen nach dem Funktionsaufruf zu finden, ansonsten habe ich selber nicht so viel Ahnung von c++, was ich schlecht beurteilen kann. Auf jeden Fall gcc 2.95 kommt damit nicht zurecht. Wenn ich gcc -x c++ benutze, dann kann ich wiederum nicht kompilieren, da gcc c++ bestimmte Typen aus der C-Sparche nicht kennt, also in beiden Fällen, wäre die Kode zu ändern. Auch kommt noch dazu, dass ich keine neuere Version z. B. gcc 3.3 für DJGPP gefunden habe, somit ist gcc 2.95 in Moment schon alt und für die Zukunft noch älter und nutzloser. Aus diesem Grund ist die Lösung mit der DJGPP nicht effizient und wurde verworfen.

 

F Die Variante 2, d.h. MinGW wurde nicht getestet, aus dem Grund, dass ich mich nach langem Lesen, durchgeführten Tests und Internet-Literatur-Informationen gleich für die dritte Variante gcc mit Cygwin entschieden habe.

 

F     Zu der dritten Variante gcc mit Cygwin

Ich habe nochmals alles mit Cygwin kompiliert und geprüft. Das Kompilieren geht problemlos, sogar die Source-Kode mit X11-Bibliothek. Es hat sich festgestellt, dass das Programm nur 2 Bibliotheken braucht, um die erzeugte Exe-Datei nach dem Kompilieren unter irgendeinem Windows-Rechner zum Laufen zu bringen Dies sind cygwin1.dll und cygX11-6.dll.

Diese kann man auch statisch zu der Exe-Datei binden, sodass eine größere Exe-Datei entsteht, was problemlos ohne Cygwin-Umgebung gestartet werden kann, aber in Prinzip geht auch, wenn die Exe-Datei und die

2 Bibliotheken in einem Verzeichnis zu finden sind, also statisches Binden ist auch nicht unbedingt notwendig.

Wenn man alle drei Dateien zippt, dann kommen wir auf ungefähr 1 MB Grösse, was sogar auf eine Diskette passt.

Ich glaube, dass dies die beste Variante wäre, das Programm unter Windows-Rechner zum Laufen zu bringen, da man weiterhin an der Kode arbeiten kann, ohne irgendwelche Veränderungen od. Compiler-Anpassungen, noch brauchen wir zum Kompilieren unter Windows keine Kode-Umstellungen (die

eigentlich immer nur mit einer bestimmten Compiler-Version fehlerfrei laufen könnten, was uns immer an einer bestimmten Compiler anbindet), noch ist nicht mehr notwendig auf jedem Windows-Nutzer-Rechner, den selben

Compiler zu installieren usw. Nächsten Vorteil wäre, dass wir für das Kompilieren nicht die vollständige Version von Cygwin brauchen. Ich habe eine Teilversion vom Netzt heruntergeladen und installiert. Das Kompilieren ging problemlos, also dies spart uns auch Zeit, da die vollständige Cygwin Version sehr groß ist und herunterladen von Netz vor allem durch Modem extrem lange dauert und auch noch danach beim Installieren viel Platz nimmt.

Nächstes Vorteil ist, dass wir die selbe Makefile, was unter Linix zum Kompilieren gebraucht worden ist, hier auch nutzen können, ohne irgendwelchen Veränderungen od. Anpassungen. Also, wir brauchen in diesem Falle keine separate Batch-Datei, die das Programm unter Windows kompiliert. Sobald die Source-Kode entpackt ist und im Cygwin-Umgebung das Kommando Make angeben worden ist, kompliliert Cygwin problemlos die Source-Dateien und erzeugt eine Exe-Datei, die zusammen mit den oben genannten 2 Bibliotheken(cygwin1.dll und cygX11-6.dll.) wiederum problemlos auf irgendeinen Windows-Rechner gestartet werden kann, ohne Cygwin-Umgebung installieren zu müssen. Also, wenn das Programm mit Cygwin kompiliert ist und die Exe-Datei erzeugt worden ist, brauchen wir auf dem Nutzer-Rechner keine Cygwin-Umgebung zu installieren, das Programm kann mit Windows-Eingabekonsole bearbeitet werden, braucht nur die oben genannten 2 Bibliotheken. Man spart wirklich viel Arbeit und Ärger und das ganze läuft völlig unabhängig von Cygwin. Dies ist der nächste Vorteil, der für die Cygwin-Lösung gesprochen hat. Also, diese Lösung hatte am meisten Vorteile und bezogen auf die oben gestellte Aufgabe die schnellste, effiziente, problemlosigste, zeitsparernste und die unkompliziertste Lösung.

 

3.  Anleitung zum Kompilieren von CYBOI unter Windows mit Hilfe von Cygwin:

Ø          Cygwin installieren (Internet-Adresse: http://cygwin.com/ml/cygwin/)

Achtung: Prinzipiell ist Cygwin nun installiert. Bei mir war das XFree86-System direkt nach der Installation leider noch nicht benutzbar, weil einige Dll’s nicht gefunden wurden. Die betreffenden Dateien liegen im

Unterverzeichnis "bin" des Cygwin Ordners. Die saubere Lösung ist, den Pfad um einen Eintrag zum Verzeichnis "bin" im Cygwin-Verzeichnis zu erweitern. Unter Windows 98/ME muß man dazu die Datei "c:\autoexec.bat" editieren und den Eintrag "SET PATH=..." um

den Text "C:\Programme\Cygwin\bin" erweiten. Die verschiedenen Verzeichnisse, die im Pfad stehen, werden dabei durch ein Semikolon getrennt. Hat man Cygwin in ein anderen Verzeichnis installiert, muß der Text natürlich entsprechend angepasst werden. Der fertige Eintrag sieht dann in etwa so aus:
          SET PATH=C:\Windows;C:\Programme\Cygwin\bin

Unter Windows NT/2000/XP wird die Einstellung des Pfads in der Systemsteuerung vorgenommen. Man wählt dazu das Icon "System" und wechselt auf den Reiter "Erweitert". Dort gibt es denn Button "Umgebungsvariablen". Im Feld "Systemvariablen" findet sich dann der Eintrag "Path": Über "Bearbeiten" kann man den bestehenden Eintrag um ein Semikolon und das Cygwin-Verzeichnis

erweitern: Damit die Änderung aktiv wird empfiehlt es sich, das System entweder neu zu starten oder alle Windows-Explorer zu beenden und neu zu öffnen.

Ø          Die vollständige Version von Cygwin ist nicht nötig.

Ø          Die Source-Dateien entpacken (z. B. in Cygwin: tar –xzf cybol-tar.gz)

Ø          Beim Entpacken werden automatisch zwei Verzeichnisse erzeugt: „src“ und „admin“

Ø          Das „src“-Verzeichnis enthält die folgende Unterverzeichnisse: cvs, symbol, dynamics, model, logger, sygnal, statics, test, x_windwows, die alle Quellkode-Dateien enthalten.

Ø          Das „admin“-Verzeichnis enthält die Makefile-Datei und die Exclude-Datei, die alle Kommandos und Anweisungen für das Kompilieren enthalten.

Ø          Dieses gilt sowohl für die Kode, die mit X-11-Bibliothecken kompiliert worden ist, als auch für die Kode ohne X-11-Bibliothecken

Ø          Keine Batch-Datei ist nötig, wir können die Makefile-Datei, die man für das Kompilieren unter Linux benutzt, hier ohne irgendwelchen Anpassungen anwenden.

Ø          Starten der Cygwin-Konsole

Ø          Wechseln in das Verzeichnis, wo sich die Makefile-Datei befindet (Wenn die Makefile sich nicht in „admin“-Verzeichnis befindet, dann können wir die Datei einfach in dem „src“-Verzeichnis kopieren)

Ø          Eingeben das Kommando „Make

Ø          Cygwin startet das Kompilieren-Prozess

Ø          Es werden neue Verzeichnisse erzeugt: „obj“- und „bin“-Verzeichnis

Ø          Im „bin“-Verzeichnis wird die Exe-Datei geschrieben (bei uns ist dies die cyboi.exe). Im „obj“-Verzeichnis werden alle „ .o “-Dateien eingelegt, die von den Source-Dateien „ .c “ erzeugt werden.

Ø          Um die Exe-Datei unabhängig von Cygwin zu starten brauchen wir die folgenden zwei Bibliotheken: cygwin1.dll und cygX11-6.dll

Ø          Diese kann man auch statisch beim Kompilieren an die cyboi.exe-Datei anbinden, wobei eine größere cyboi.exe-Datei entsteht, die man problemlos auf irgendeinen Windows-Rechner selbständig und unabhängig von Cygwin gestartet werden kann

Ø          Man kann genauso gut danach die cyboi.exe-Datei von der Windows-Eingabekonsole gestartet werden. (od. eventuell per Doppeltklick, in diesem Falle müssen die Bibliotheken in dem selben Verzeichnis sein, wo die cyboi.exe ist)

Ø          Cygwin-Umgebung muß auf dem Nutzer-Rechner nicht unbedingt installiert werden

Ø          Man kann auch die Pfade einstellen, wenn man die cyboi.exe starten will, ohne man sich direkt in dem Verzeichnis befinden zu müssen, wo diese steht. In diesem Falle muß man der Umgebungsvariable „Path“ einen neuen Eintag setzen, nämlich das Verzeichnis wo sich die cyboi.exe-Datei befindet.

Weiterfuehrende Links

http://tutorial.schornboeck.net/windows_comp.htm

http://www.c-worker.ch/compiler/

http://www.thomas-guettler.de/vortraege/oss4win/oss4win.html

http://gcc.gnu.org/lists.html

http://packman.links2linux.de/?action=097

http://www.cpp-tutor.de/cpp/le01/le01_01.htm

http://home.eplus-online.de/alfred/alfred/f0056.htm#M576

http://tutorials.tanmar.de/cygwin_netz.php

http://www.linux-magazin.de/Artikel/ausgabe/2002/12/cygwin/cygwin.html

http://www.oscg.ch/rsc/tools/standalone/cygwin.html

http://cplus.kompf.de/artikel/cygwin.html

http://www.theorie.physik.uni-wuppertal.de/comphys/Ausbildung/Lehrer/programm_beschreibung/node10.phtml.de

http://www.wire.tu-bs.de/ADV/texte/inf3text/node7.html



Copyright (c) 2004-2004. The CYBOP Webmasters. All rights reserved. GNU FDL license. Last Update: 2004-07-09