Outils pour utilisateurs

Outils du site


allegro:install_netbeans

Ce tutoriel est assez long et compliqué à mettre en œuvre, il demande quelques connaissances du Shell Linux et du développement sous Windows.
Cet article est basé sur un projet Allegro, mais peut fonctionner avec n'importe quel projet C/C++.

À propos de Netbeans

Netbeans est un EDI multilangage et multiplateforme très performant : gestion de projets, coloration syntaxique, auto complétion, … et qui permet entre autre de compiler un projet en C sur différents hôtes à partir du même poste, et aussi de déboguer sur ce poste le code exécuté sur l'hôte distant.

Il est clair que c'est une fonctionnalité très intéressante quand on souhaite produire un code portable et pouvoir le tester sans avoir à changer de poste. Ça évite les décisions du genre : coder sur une architecture d'abord, porter le code ensuite.

Netbeans est capable de partager le code via NFS, SMB et SSH mais a besoin dans tous les cas de SSH pour appeler le compilateur. La seule contrainte et que le système distant doit être d'architecture UNIX (GNU/Linux, Solaris, Mac, BSD, …).

Dans ce tutoriel le cas abordé sera un système hôte Windows et un système distant GNU/Linux via SSH uniquement. Pour les autres configurations, référez vous au tutoriel Netbeans (en).

Installation et configuration du système hôte : Windows

Nous allons installer MinGW, Java, Netbeans et un serveur Xorg.

Installation de MinGW

Note: Si vous avez CodeBlock, vous disposez certainement déjà de MinGW, dans C:\Program Files\CodeBlocks\MinGW, si vous avez aussi MSYS et make.exe, passez directement au paragraphe suivant.

Netbeans n'est pas distribué avec un compilateur, vous devez l'installer vous même.

Netbeans n'est capable (actuellement à la v7.1.1) que de gérer le compilateur GNU (Cygwin et MinGW) ou des compilateurs exotiques qui ne nous intéressent pas.

Comme Cygwin demande un environnement UNIX emulé installé sur la machine de l'utilisateur, on va s'orienter vers MinGW qui est un port pour windows de la suite GCC.

Installateur MinGW : Installez au moins le compilateur C et installez MSYS (important pour avoir la commande make).
Je recommande l'installation dans le répertoire proposé par défaut (C:\MinGW) car Netbeans sera alors capable de le détecter.

Récupérez Allegro compilé pour MinGW : Alleg 5.0.7 Et extrayez-le à la racine de votre disque C:\allegro

Installation de Java

Netbeans a besoin de Java pour fonctionner. Si vous ne disposez pas encore de Java (en général présent si vous avez le dossier C:\Program Files\Java) installez la dernière version du JRE.

Facultatif : Vous pouvez télécharger le JDK plutôt que le JRE si vous souhaitez programmer en JAVA.

Installation de Netbeans

Rendez-vous sur la page de téléchargement, elle propose automatiquement la dernière version de Netbeans.

Il existe plusieurs paquets Netbeans : un installateur Windows ou un Zip portable, à vous de voir.
De plus après un certain temps (pour traduire) la communauté propose une version en Français.

Il existe aussi différentes distributions de Netbeans, en fonction de l'utilisation, le paquet contiendra déjà les modules qui vous intéressent : prenez une version qui contient le module C/C++.
Sachez qu'un gestionnaire de greffons est intégré à Netbeans, et que si plus tard vous souhaitez disposer du module PHP par exemple, pas besoin de télécharger la distribution complète, rendez-vous simplement dans le menu Tools → Plugins

Installation d'un serveur Xorg

Pour afficher le résultat graphique de notre programme exécuté sur le serveur GNU/Linux, on va rediriger les commandes vers notre poste Windows mais il est incapable de les interpréter. On va devoir installer un port du serveur graphique de GNU/Linux sur notre poste de travail.

Cygwin est un système GNU/Linux émulé complet, il est bien plus qu'un port de Xorg, c'est un port de GNU/Linux sous Windows 8-O.
De ce fait, il est assez lourd et demande la connaissance du shell pour pouvoir configurer Xorg.

Téléchargez et exécutez http://cygwin.com/setup.exe, cliquez sur Suivant jusqu'à la fenêtre avec la grande arborescence, sélectionnez pour installation les paquets suivants :
xorg-server xinit xhost X-start-menu-icons xterm openssh inetutils mesa-demo
Facultatif : installez aussi mintty qui est un terminal natif win32, bien mieux que xterm car il fonctionne sans serveur Xorg.

Démarrez le serveur X11, dans le menu Démarrer → “Cygwin-X” → “XWin Server

Dans le Xterm qui s'ouvre, tapez :

xhost.exe + ip.du.serveur.linux

Cette commande autorise le serveur distant à utiliser Xorg, il faudra retaper cette commande à chaque lancement de Xorg.

Installation et configuration du système hôte : GNU/Linux

Il faut installer GCC, GDB ainsi que les headers de la libC et des commandes make et cmake.
Sous les distribs debian-like les paquets sont build-essential, gdb, make et cmake.

Il faut installer sshd, le serveur SSH.
Sous les distribs debian-like c'est le paquet openssh-server.
On doit éditer le fichier /etc/ssh/sshd_config et mettre l'option X11Forwarding à yes. Sous debian cette option est à yes par défaut. Faites /etc/init.d/sshd restart pour prendre en compte la modification.

Facultatif : Nous pouvons créer un utilisateur de connexion pour Netbeans grâce à la commande adduser.

Nous allons maintenant installer Allegro.

Malheureusement, dans les dépôts de Debian, Allegro est à la version 4.2 :-( on va devoir compiler nous même Allegro en version 5.
Néanmoins les dépendances d'Allegro sont à installer via le gestionnaire de paquet :
libx11-dev libglut3-dev libxcursor-dev libphysfs-dev libgtk2.0-dev libxrandr-dev libxxf86vm-dev libxpm-dev libalut-dev libpulse-dev libjpeg-dev libpng-dev libfreetype6-dev libogg-dev libvorbis-dev libvorbisfile-dev libflac-dev

Téléchargez l'archive des sources d'Allegro.

tar xzvf allegro*.tar.gz && cd allegro*
mkdir build && cd build
cmake ..
make && make install

Note: vous pouvez installer allegro dans /usr/local avec : cmake -DCMAKE_INSTALL_PREFIX=/usr/local ..

Normalement ça devrait compiler

Configuration de Netbeans

Ajout de l'hôte

Nous allons devoir configurer Netbeans pour compiler sous les 2 OS.

Créez un projet C/C++, Netbeans devrait normalement proposer MinGW, sinon il vous demandera où est le compilateur, et il faudra lui indiquer le dossier bin (qui contient entre autres gcc.exe).

Maintenant sur la gauche de l'interface, vous avez un onglet vertical “Services” qui contient une arborescence. Cliquez-droit sur “C/C++ Build Hosts” → “Add New Host…”. Renseignez l'ip, puis le login. Le mot de passe vous sera demandé à la première connexion (c'est à dire au clic sur suivant).

Netbeans va scanner les dossiers du PATH à la recherche des commandes gcc, g++, gdb, make, …

Vous devriez obtenir :

Configuration du Projet

Sur la gauche de l'interface, vous avez un onglet vertical “Projects” qui contient une arborescence dont la racine est votre projet.
Cliquez-droit dessus → “Set Remote Build Host” vous permet de changer d'hôte, ensuite dans le même menu contextuel, cliquez sur “Properties”, pour configurer le projet en fonction de l'hôte choisi.

Pour l'hôte local :

  • BuildC CompilerInclude Directories : C:/allegro/include
  • BuildLinkerAdditional Library Directories : C:/allegro/lib
  • BuildLinkerLibrariesAdd Library :
    • En Debug : liballegro-5.0.7-monolith-md-debug.a
    • En Release : liballegro-5.0.7-monolith-md.a
    • Pour les deux cibles :
      libopengl32.a
      libwinmm.a
      libgdi32.a
      libshlwapi.a
      libpsapi.a
      libole32.a

Nous ne compilons pas en statique car à cause de Direct3D, on est obligé de compiler avec g++ et ça génère pas mal d'erreurs :-(
Prenez le helloworld de l'article sur MSVC, appuyez sur F11 et si ça compile, c'est fini pour la configuration ! Pour exécuter le programme, il vous faudra 3 dlls :
allegro-5.0.7-monolith-md-debug.dll dans le répertoire bin d'Allegro
libgcc*.dll et libstdc++.dll dans le répertoire bin de MinGW

Pour l'hôte distant :

N'oubliez pas de changer d'hôte !!

Dans les propriétés de la cible, cliquez sur Manage Configurations…
Cliquez deux fois sur New pour faire apparaître deux nouvelles cible que vous pouvez renommer Linux_Debug et Linux_Release par exemple.

Sélectionner les nouvelles cibles et, si vous avez installé allegro dans /usr ou /usr/local, il suffit de mettre :

  • BuildLinkerLibrariesAdd Library : allegro
  • En Debug : BuildC CompilerDevelopment Mode : Debug
  • RunEnvironment Ajoutez les deux variables suivantes :
    • DISPLAY → ip.du.poste.windows:0.0
    • LIBGL_ALWAYS_INDIRECT1

N'oubliez pas de démarrer votre serveur Xorg :!:
Appuyez sur F6 et ça devrait compiler, la fenêtre exécutée à distance s'affiche, tout marche ^_^

Voilà ce que vous devez obtenir (cliquez pour agrandir) :

Pour finir

Débogage à distance

Sélectionnez l'hôte distant, dans le helloworld placez un point d'arrêt (breakpoint) (en cliquant sur le numéro de ligne dans la gouttière à gauche, c.f. image précédente) à la ligne déclarant la variable display.

Lancez le débogage (Ctrl+F5) : le programme est envoyé sur le serveur, il est compilé puis gdb est contrôlé à distance par Netbeans, il y a plus qu'à cliquer sur step in pour avancer dans l'exécution.
Le résultat graphique est affiché sur votre écran, Tout se fait de manière très simple et très fluide. Pas besoin de lancer une lourde machine virtuelle ni d'avoir à déplacer les sources, recompiler, et se balader d'une machine à l'autre.

Performances

Notre système actuel n'est pas très performant, en effet, Allegro utilisant OpenGL, le code est exécuté sur le serveur avant d'être envoyé à notre serveur Xorg.
Mais on a fait ça pour déboguer, pas pour jouer, si c'est ce que vous souhaitez, regardez http://www.virtualgl.org, mais ça sort du cadre de cet article.

Résolution des problèmes

Je n'ai pas d'affichage

Vérifiez d'abord que vous avez bien lancé Xorg et que vous avez autorisé l'IP de l'hôte à l'utiliser.
Vérifiez que les variables d'environnement dans les propriétés du projet, à Run sont justes.

Si ça ne marche toujours pas, vérifiez votre pare-feu Windows, il bloque certainement les communications externes de Xorg.
Je travaille avec un serveur en Lan, je ne sais pas ce que ça donne avec un serveur internet et un pare-feu physique (genre Box internet).

GDB plante

Si GDB se plaint de ne pas pouvoir contrôler le terminal, dans les propriétés du projet, à Run, mettez Console TypeStandard Output.

Autres Problèmes

Si vous rencontrez un problème dont je ne parle pas dans cet article, ou si vous avez une amélioration à me proposer, envoyez-moi un mél

allegro/install_netbeans.txt · Dernière modification: 2012/08/25 04:40 par mrhide