[ Présentation | Installation | Présentation de l'arborescence | Lancement du shell cygwin | Premier programme C "Hello world !" | Premier programme C++ ]

Dernière modification 29.10.00

Programmer avec Cygwin

Présentation

Cygwin n'est ni plus ni moins que le portage sous windows du compilateur GNU GCC que l'on retrouve sous Linux et d'autres UNIX. Il permet d'écrire du code en C et C++, code qui pourra être utilisé sur une autre machine Windows ne disposant pas de Cygwin.
Mais Cygwin c'est bien plus que cela, c'est un véritable OS dans l'OS, il copie complètement UNIX avec toutes ces commandes standards et son environnement, c'est donc une excellente alternative pour découvrir UNIX.
Cygwin est un produit en plein développement, ne vous étonnez donc pas s'il peut planter de temps à autre.
Pour la petite histoire cygwin est un produit de la société cygnus, qui entre autres réalise le célèbre compilateur GNU GCC, et qui a été acheté récemment par Redhat, d'où le format de l'URL du site officiel http://sources.redhat.com/cygwin.
La licence est la suivante, si vous avez acheté une licence avec Cygnus, vous avez le droit de créer des programmes mais ne peut diffuser le code, par contre si vous n'avez pas acheté de licence, vous tombez dans le cadre de la licence GPL, c'est à dire que vous êtes obligé pour tout programme que vous créez et fournissez de fournir aussi le code associé.

Beaucoup de programmes sous licence GPL qu'on trouve sous Linux notamment peuvent être compilés sous Windows avec cygwin, la page wwwoffle sous windows présente ainsi la compil de wwwoffle à l'aide de cygwin.

[Retour haut de la page]

Installation

Vous avez la possibilité de récupérer les packages qui vous intéressent directement sur les sites miroirs de cygwin et de vous débrouiller pour les installer, ou alors de télécharger un petit exécutable qui va vous guider dans la récupération des packages et leur installation. C'est la dernière solution que j'ai choisie, on récupérera setup.exe à l'URL http://sources.redhat.com/cygwin.
A l'exécution de ce programme, on passe d'abord par une fenêtre d'information, cliquez sur  Next. Vous pouvez alors choisir de télécharger dans un premier temps les packages (Download from Internet), de télécharger et d'installer dans la foulée (Install from Internet), d'installer les packages qui ont été téléchargés préalablement et qui sont contenus dans un répertoire local (Install from Local directory).

Je préfère l'installation en deux parties, le téléchargement puis l'install, je choisis donc Download from Internet. On doit alors choisir le répertoire local où seront stockés les packages, cliquez ensuite sur Next. Vous devez ensuite sélectionner le type de votre connexion, vous avez le choix entre :

- use IE5 settings
- direct connexion
- use http/ftp proxy

Personnellement j'utilise un proxy perso (wwwoffle), j'ai donc coché http/ftp proxy, indiqué le nom de mon serveur proxy et le numéro de port (8080 dans le cas de wwwoffle), on clique sur Next une fois terminée.
On doit alors choisir un site de téléchargement, pour ma part j'ai choisi  ludique.u-bourgogne.fr, pour continuer on clique alors sur Next.
On sélectionne maintenant  les packages qu'on veut installer. Par défaut tous sont sélectionnés, vous pouvez en déselectionner en cliquant dessus, vous pouvez choisir aussi de télécharger les sources en cochant sur la case marquée Src? des packages qui vous intéresse.

Cliquez sur Next quand vous avez terminé. Vous devez maintenant choisir le répertoire de destination puis cliquez sur Next. Le téléchargement peut commencer :

Pour info cela fait plus de 45Mo sans les sources !

Pour l'installation proprement dite, on relance setup.exe
Cette fois ci au niveau de la fenêtre de choix du mode d'installation, on choisira Install from Local Directory, puis Next, on doit alors choisir le répertoire où se trouvent les packages téléchargés, puis Next. On doit alors choisir le répertoire d'installation et le format des fichiers texte (par défaut c'est le format Unix qui est choisi) :

Puis Next, on retrouve la fenêtre de choix des packages, choisissez exactement ce que vous avez téléchargés, puis cliquez sur Next. L'installation peut commencer :

A la fin de l'installation on vous donne la possibilité de créer des raccourcis sur le bureau et dans le menu Démarrer, cliquez sur Next pour continuer. Une dernière fenêtre vous indique alors que l'installation est terminée (Installation Complete), cliquez sur OK pour terminer.

[Retour haut de la page]

Présentation de l'arborescence

Les sous répertoires suivants sont créés dans le répertoire d'installation:

- bin, contenant les exécutables,  on retrouve beaucoup de commandes standards UNIX, en voici un brel panel : awk, bash, bison, bunzip2, chmod, date, dd, find, grep, kill, m4, make, gcc, man, mount, rcp, su, telnet, touch, vi, whoami, et j'en passe et des meilleurs...
- etc, contenant les fichiers  de configuration.
- home, contenant les répertoires utilisateurs
- lib, contenant toutes les bibliothèques diverses y compris celle de développement
- tmp, répertoire temporaire
- usr qui contient lui-même
        - bin, répertoire d'exécutable (vide par défaut)
        - doc, pour documentation
        - include, contenenant les headers nécessaires pour développer
        - info, (?)
        - lib, autre répertoire de bibliothèque (vide par défaut)
        - libexec, répertoire d'exécutable
        - local contenant d'autres sous répertoires (bin, doc, etc, include et lib) pour certaines applis bien spécifiques
        - man, contient les manuels des divers applis
        - sbin, exécutables pour l'administrateur
        - share, contient les ressources des différents exécutables
        - ssl, pour rajouter une couche sécurisée à la couche transport de TCP
        - tmp, autre répertoire temporaire
- var, contient les variables temporaires et autres fichiers de logs.

Vous avez vite reconnu une arborescence type UNIX

[Retour haut de la page]

Lancement du shell Cygwin

On lance cygwin à partir de l'icône sur le bureau ou du menu Démarrer (Programmes->Cygnus Solutions->Cygwin Bash Shell), une fenêtre type DOS apparaît qui est en fait un shell comme on peut en trouver sous UNIX, c'est comme son nom l'indique l'implémentation sous windows du bash shell bien connu sous Linux.
Ceux qui sont familiers à UNIX n'auront aucun mal à se débrouiller avec ce shell, les autres devront commencer peut être d'abord à apprendre les commandes de base d'UNIX que vous trouverez dans mon cours UNIX.
Vous aurez vite constaté que comme sous Unix vous devez pour vous déplacer dans l'arborescence taper / comme sous UNIX au lieu de \. Vous retrouvez en vous baladant dans l'arborescence, celle qui a été présentée dans le paragraphe précédent.

A noter aussi que la complétion (touche TAB) existe aussi comme sous UNIX, de même que vous avez droit aux rappels des dernères commandes avec !. Pour quitter proprement il suffit de taper logout

[Retour haut de la page]

Premier programme C : Hello World !

On va écrire le traditionnel programme hello.c qui va nous afficher Hello World !!. Pour cela placez vous dans votre home directory

cd

Puis tapez

vi hello.c

Voici le contenu du dit-fichier:

int main () {}
    printf ("Hello world!\n");
    return 0;
}

Voici un screenshot de l'action de vi :

Pour les connaisseurs, vous constaterez qu'en fait de vi,  c'est plutôt vim (le vi coloré). Pour ceux qui rechignent à utiliser vi, vous pouvez très bien aussi taper  votre texte dans n'importe quel éditeur du style Bloc Note.
On compile le programme en tapant:

gcc -c hello.c
gcc -o hello hello.o

La première commande crée le .o et la deuxième le .exe. Pour voir si ça marche, tapez :

./hello

Et vous devriez voir:

Hello world !

Ca marche !! Regardons maintenant de quelles DLL (bibliothèques windows) notre programme dépend en tapant:

objdump -p hello.exe | grep "DLL Name"

On obtient

DLL Name: cygwin1.dll
DLL Name: KERNEL32.dll

La première fait partie de la distrib cygwin, le deuixème est standard sous windows. Le problème est que votre programme n'est pas portable, c'est à dire qu'en l'exécutant sur un autre PC démuni de Cygwin, le programme refusera de s'exécuter. On va faire en sorte que notre programme ne dépende que de DLL standards de Windows.
On recompile en rajoutant une option:

gcc -c -mno-cygwin hello.c
gcc -o hello -mno-cygwin hello.o

On obtient à nouveau hello.exe qui marche aussi bien que le précédent, par contre si on veut voir les DLL dont il dépend :

objdump -p hello.exe | grep "DLL Name"

On obtient

DLL Name: crtdll.dll
DLL Name: KERNEL32.dll

Ce sont deux DLL standards de windows, votre programme est donc portable sur d'autres plateformes windows.

[Retour haut de la page]

Notre premier programme C++

On va créer le programme hello.cpp suivant :

#include <iostream.h>
int main () {
    cout << " Hello World!" << endl;
    return 0;
}

On le compile en tapant:

c++ -c hello.cpp
c++ -o hello hello.o

Vous pourrez vite constater que le programme obtenu réalise bien ce pour quoi il a été écrit. Vous constaterez aussi que l'option -mno-cygwin génère une tonne d'erreurs (essentiellement des undefined reference). Mais pas de panique pour porter vos programmes il suffira d'inclure dans vos packages la DLL cygwin1.dll.
 
 
[Retour page d'accueil FUNIX]