Utiliser facilement les librairies avec CodeLite

Nous avons vu l’utilisation de CodeLite dans un article précédent.

En programmation, on utilise souvent des librairies.

Une librairie fournit un ensemble de fonctions ou d’objets permettant de remplir des tâches complexes. On pourra citer dans le domaine de l’embarqué: libmodbus, libgammu, piduino

Pour utiliser une librairie en langage C ou C++, il faut disposer de 2 choses:

  • Un ou plusieurs fichiers .h qui décrivent l’interface d’utilisation (API) et qui doivent être ajoutés au début des fichiers où on utilise la librairie (avec un #include)
  • Un fichier contenant le code exécutable et les données statiques. Dans Linux, on trouve 2 formats:
    • le fichier statique (extension .a) qui permettra d’inclure les informations au moment de la compilation
    • le fichier dynamique (extension .so) qui chargera les informations au moment de l’exécution.

Il faut préciser qu’il est parfois nécessaire pour compiler un programme correctement avec une librairie d’ajouter des options sur la ligne de commande du compilateur (gcc).

Lorsqu’on souhaite utiliser CodeLite, il faut donc lui donc lui donner toutes ses informations, ce qui peut devenir fastidieux !

Heureusement, la plupart du temps, les librairies sont fournies avec des fichiers qui décrivent ses informations. Pour lire ses informations, on utilise le programme pkg-config.

Faisons un essai avec libmodbus (qu’on suppose installée…):

$ pkg-config --cflags --libs libmodbus
-I/usr/local/include -L/usr/local/lib -lmodbus
--cflags permet de demander les options à passer au compilateur, alors que --libs permet de demander les options à passer à l’éditeur de liens (linker).

Dans CodeLite, nous pouvons utiliser pkg-config pour configurer automatiquement les options de compilation et d’édition de liens.

En faisant, un clic-droit sur le dossier du projet dans le bandeau de gauche, on sélectionne Settings, puis Compiler:

On sélectionne C Compiler Options, puis on clic sur les 3 petits points

On entre dans la boite blanche la commande $(shell pkg-config --cflags libmodbus)

Puis on sélectionne Linker

On entre dans la boite blanche la commande $(shell pkg-config --libs libmodbus)

On valide par Ok

On peut alors voir lors de la compilation, que les options ont été automatiquement passées au compilateur:

Utiliser CodeLite en sudo

Il est parfois nécessaire de lancer CodeLite en sudo pour effectuer la mise au point d’un programme qui nécessite les permissions d’accès root.

Si l’on lance CodeLite avec sudo, cela échoue avec le message :

X11 connection rejected because of wrong authentication.
23:20:43: Error: Unable to initialize GTK+, is DISPLAY set properly?

Par défaut, X-Window refuse d’exécuter un connexion en root.

Il est possible de feinter le système de la façon suivante:

sudo -s
xauth merge /home/pascal/.Xauthority
exit

Dans les commandes ci-dessus, on commence par passer en root, puis on récupère les informations de connexion de l’utilisateur courant (pascal ici), puis on revient en utilisateur normal.

On peut maintenant lancer la commande

sudo codelite &

CodeLite se lance sans problème…

Utilisation de CodeLite

CodeLite est environnement de développement très léger qui peut facilement être utilisé sur NanoPi (ou toute autre carte Pi).

Dans ce tutoriel, nous allons utiliser Codelite pour créer un programme en langage C simple sur un NanoPi Neo sous ArmBian 5.41 (basé sur une Debian Stretch). Notre programme contiendra un simple printf, pour l’instant, mais 3 autres articles utiliserons ce premier tutoriel comme base afin d’effectuer des opérations sur MODBUS…

Dans un premier temps nous allons nous connecter au NanoPi par SSH à partir d’un système Linux (pour faire simple). Il faut savoir qu’il est possible d’effectuer les mêmes opérations sous MS Windows à condition d’installer un client SSH comme PuTTY, de le configurer pour utiliser le X11 Forwarding et d’installer un serveur X-Window comme Xming. Comme nous voulons faire simple, nous allons nous connecter à partir de Linux 😉

Connexion au NanoPi

Pour se connecter au NanoPi à l’adresse 192.168.122.70 avec mon identifiant (pascal), je tape :

    $ ssh pascal@192.168.122.70

Avant de lancer CodeLite, il faut l’installer ainsi que quelques paquets nécessaires (mais non installés automatiquement) :

    $ sudo apt upate
    $ sudo apt install codelite codelite-plugins hicolor-icon-theme gtk2-engines-pixbuf lxterminal libatk-adaptor libgail-common libcanberra-gtk-module xauth

Une fois les installations effectuées, on se déconnecte, puis on se reconnecte en ajoutant l’option -X et on peut alors lancer CodeLite :

    $ exit
    $ ssh pascal@192.168.122.70 -X
    $ codelite &

La fenêtre ci-dessous s’ouvre.

Création de l’espace de travail

CodeLite utilise des espaces de travail qui permettent de regrouper un ensemble de projets. Pour un espace de travail, on utilise le menu File, puis New, puis Workspace. La fenêtre ci-dessous s’ouvre.

On remplit le nom de notre nouveau workspace (libmodbus-tutorial), on choisit le dossier en cochant la case demandant de créer un nouveau répertoire.

Après avoir cliqué sur Ok, on se retrouve avec le nouvel espace de travail présent dans le bandeau latéral à gauche de la fenêtre de CodeLite:

Création du projet

Dans CodeLite, un programme correspond à un projet. Il existe un grand nombre de modèles présent, mais dans notre cas, nous allons créer un simple programme C en ligne de commande.

Pour créer un nouveau projet, on utilise le menu File, puis New, puis Project (on peut aussi faire un clic-droit sur l’espace de travail dans le bandeau de gauche).

La fenêtre suivante nous permet de choisir le modèle de projet (Simple executable (gcc)):

Il faut alors choisir un nom pour notre projet (hello-world ici) et cocher la case demandant de créer un nouveau répertoire dans celui de l’espace de travail:

Le choix de la chaîne de compilation doit laisser par défaut, il suffit donc de cliquer sur Finish dans la fenêtre suivante:

On voit alors dans le bandeau de gauche notre nouveau projet, en cliquant sur le petit triangle à gauche du dossier bleu hello-world, on peut voir qu’il contient un dossier « virtuel » nommé src que l’on peut lui même dérouler. On voit que le projet contient un seul fichier main.c Un double clic que le fichier main.c permet de l’ouvrir:

Compilation du projet

Pour compiler le programme il faut utiliser le menu Build, puis Build Project. On peut aussi utiliser la touche F7 ou l’icône .

Un rapport en bas de la fenêtre indique que la compilation s’est effectuée avec succès.

Exécution du programme

Pour exécuter le programme on utilise le menu Build, puis Run. On peut aussi utiliser la touche Ctrl+F5 ou l’icône .

Le programme se lance, une fenêtre de terminal s’ouvre et nous affiche le message correspondant à notre prinf:

Un appui sur la touche Entrée met fin au programme.

Exécution en mode pas à pas

Il est possible d’exécuter le programme en mode pas à pas.

Pour lancer l’exécution en mode pas à pas, on utilise le menu Debugger puis Start/Continue Debugger. On peut aussi utiliser la touche F5 ou l’icône

Le mode permet :

  • d’exécuter instruction par instruction (touche F10)
  • d’exécuter instruction par instruction en rentrant dans les fonctions (touche F11)
  • de placer des points d’arrêts afin de stoper le programme lorsqu’il exécute une instruction à une ligne donnée (touche F9)
  • de lancer le programme jusqu’au prochain point d’arrêt ou jusqu’à la fin (touche F5)
  • de relancer le programme (touche Shift+Ctrl+F5)
  • de surveiller le contenu des variables locales (bandeau de droite, onglet Locals)
  • de surveiller d’autres variables: globales … (bandeau de droite, onglet Watch)

Et bien d’autres choses.

Toutes ses actions sont disponible à partir de la barre d’outils dans la bandeau: