Bibliothèques dans Geany

Signaler
Messages postés
7
Date d'inscription
mardi 15 septembre 2020
Statut
Membre
Dernière intervention
1 juin 2021
-
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021
-
Bonjours à tous !

J’ai une simple question je cherche à ajouter une bibliothèque à l’IDE Geany mais après plusieurs recherches impossible de trouver une explication claire.

Je précise que c’est une bibliothèque quo vient d’un GitHub.

J’utilise Geany non pas par choix mais parce qu’il est sur mon raspberry et qu’il permet apparement de programmer les pins GPIO du raspberry en C.

Merci pour votre aide !

6 réponses

Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021
937
Tu es perdu parce que tu ne sais pas utiliser les informations de la documentation et les fichiers de compilation qui sont dans ce projet.

Avant tout, ta bibliothèque accessible dans https://github.com/hzeller/rpi-rgb-led-matrix doit être compilée.

1.

Ce projet a un fichier Makefile à la racine, qui permet de compiler la bibliothèque et les programmes d'exemple.

En ligne de commande, dans ce répertoire, tu tapes : make

et cela devrait compiler la bibliothèque et mettre les binaires dans le sous-répertoire lib/ (tu devrais y trouver librgbmatrix.a dans ce répertoire après compilation) et les programmes d'exemples

les entêtes (.h) sont dans le sous répertoire include/

après avoir compilé ceci, si la compilation se fait sans erreurs, les programmes d'exemple devraient aussi être compilés et tu peux tester ces programmes d'exemples et voir s'ils fonctionnent.

Ensuite, tu peux songer à utiliser la bibliothèque dans tes propres programmes

Tu peux voir dans le Makefile dans le répertoire examples-api-use/ que tu as notamment un programme C, c-example.c

Le Makefile rappelle que la bibliothèque est programmée en C++, mais qu'elle dispose d'une API en C et tu peux voir comment est faite la compilation dans le Makefile pour compiler ce programme en C.

2.

Copie les répertoires lib/ et include/ sous le répertoire de ton projet

Sur la base de ce que fait le Makefile pour le fichier d'exemple .c, tu peux paramétrer le projet Geany, pour :

Compile: gcc -Iinclude -Wall -O3 -g -Wextra -Wno-unused-parameter -c "%f"
Build: gcc -Iinclude -Wall -O3 -g -Wextra -Wno-unused-parameter -o "%e" "%f" -Llib -lrgbmatrix -lrt -lm -lpthread -lstdc++


Ensuite, tu compiles ton programme C avec le menu Construire - Compile (ou F8) et tu crées ton exécutable avec Construire - Build (ou F9).

Tu peux aussi utiliser un fichier Makefile avec Geany. Il suffit de le mettre dans le répertoire de ton projet et de faire Construire - Make (ou Maj-F9) pour l'utiliser.

Pour cela, il faut que tu apprennes à créer ton propre fichier Makefile et que tu comprennes les options de compilation et de liaison qui sont impliquées dans la construction d'un programme :-)

Dal
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021
937
Salut Math00s,

Tu n'ajoutes pas une bibliothèque dans Geany, mais tu peux concevoir ton projet et le paramétrer pour utiliser telle ou telle bibliothèque dans la phase de compilation et de liaison.

Dans Geany :
  • tu crées d'abord un projet avec Projet - Nouveau
  • tu insères un fichier : Fichier - Nouveau (selon un modèle) - main.c que tu sauvegardes
  • tu paramètres les lignes de commande de compilation et de liaison pour ton projet dans Projet - Propriétés - Construire


La façon dont du compiles avec la "bibliothèque" que tu as récupéré sur Github dépend de comment elle est conçue pour fonctionner. Vois les instructions fournies par son concepteur.

J’utilise Geany non pas par choix mais parce qu’il est sur mon raspberry et qu’il permet apparement de programmer les pins GPIO du raspberry en C.

Geany ne fait pas cela, c'est éventuellement les bibliothèques disponibles pour Raspberry. Geany est un EDI assez simple et léger et fonctionner bien sur un système aux ressources qui ne sont pas infinies comme un Raspberry.

Dal
Messages postés
7
Date d'inscription
mardi 15 septembre 2020
Statut
Membre
Dernière intervention
1 juin 2021

Tour d’abord merci pour vos explications claires !

Seulement je n’ai pas compris ce qu’il faut faire à la dernière étape. J’ai bien trouvé le menu construire mais que suis-je censé rentrer dans les lignes compile build et lint ?

Et la bibliothèque que j’aimerai utilisé vient de ce git : https://github.com/hzeller/rpi-rgb-led-matrix
Il s’agit de faire fonctionner un panneau led.
Messages postés
7
Date d'inscription
mardi 15 septembre 2020
Statut
Membre
Dernière intervention
1 juin 2021

Je viens de voir que dans le GitHub il y a aussi des codes en python. Cependant je me heurte au même problème, j’ai des modules qui ne sont pas installés.

Personnellement j’avais l’habitude d’arduino ou l’ajout de librairie était très simple.

La je ne comprends vraiment pas comment faire fonctionner ne serait-ce qu’un seul programme d’exemple
Messages postés
7
Date d'inscription
mardi 15 septembre 2020
Statut
Membre
Dernière intervention
1 juin 2021

Encore merci vos explications sont vraiment très clairs !!

J’ai un léger souci en faisant la commande make, la console me retourne 2 erreurs (cf photos, excusez la qualité
). Erreurs qui sont similaires lorsque je tente de build un programme d’exemple dans Geany. J’imagine qu’à ce niveau il s’agirait plus d’un problème du GitHub non ?

Merci !
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021
937
Bonjour Math00s,

Les sources dans Github compilent très bien sur une Debian 10 (je n'ai pas de Rapsberry sous la main pour tester).

On dirait que quelque chose ne va pas dans ta chaîne de compilation, lors de la phase de liaison au lancement de /usr/bin/ld ... arrives-tu à compiler des programmes simples sur ta machine ?

Peux tu tester de compiler en ligne de commande
hello-world.c
dans un répertoire où tu as des droits de lecture et écriture :

#include <stdio.h>

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


gcc -Wall hello.c -o hello-world


est-ce que cela produit bien un fichier exécutable
hello-world
?

si tu lances
/usr/bin/ld
en ligne de commande as-tu bien "/usr/bin/ld: no input files" en résultat ?

fais
file /usr/bin/ld
qu'est-ce que cela donne ?
Messages postés
7
Date d'inscription
mardi 15 septembre 2020
Statut
Membre
Dernière intervention
1 juin 2021

J’obtiens ceci en testant vos différentes commandes :
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021
937
Salut Math00s,

Mes doutes se confirment. Tu ne peux pas même compiler un programme simple car tu ne sembles ne pas avoir une installation de
ld
(éditeur de liaisons) fonctionnelle. Ce programme intervient après le compilateur gcc pour rassembler des différents fichiers objet générés et les lier à la bibliothèque standard du C et à d'éventuelles autres bibliothèques liées statiquement ou dynamiquement, ce qui est la dernière étape nécessaire à la production de l'exécutable.

fais
file /usr/bin/arm-linux-gnueabihf-ld


tu devrais obtenir le fait qu'il s'agit lui-même d'un lien symbolique vers arm-linux-gnueabihf-ld.bfd (si je me fie au contenu des paquets ARM Debian)

fais ensuite
file /usr/bin/arm-linux-gnueabihf-ld.bfd
(ou le nom que tu obtiens s'il s'agit d'un nom différent)

une fois que tu as utilisé la commande
file
sur chacun des liens symboliques successifs, tu devrais aboutir à un fichier qui est un vrai fichier, et qui devrait être un exécutable binaire, avec un résultat à peu près comme ceci :

arm-linux-gnueabihf-ld.bfd: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=15642649a945e4d901b9c74154cb48d666578bf3, stripped


Compte tenu des erreurs que tu montres sur un simple lancement de
ld
, je pense que dans ton système
/usr/bin/ld
pointe sur une chaîne de liens qui aboutit à un fichier texte avec des permissions d'exécution, mais qui ne contient pas un script exécutable dans un langage de script. De plus,
ld
, sur les différents systèmes que je connais est un exécutable binaire (comme dans le résultat ci-dessus) et pas un fichier texte.

Comment as-tu installé ta chaîne de compilation sur ta Raspbian ?

Si tu l'as installée via les paquets Raspbian soit il y a eu un problème lors de l'installation, soit tu as altéré cette installation et tu devrais réinstaller le paquet binutils sur ta Raspbian :

sudo apt install --reinstall binutils


éventuellement aussi :

sudo apt install --reinstall build-essential


Si tu n'as pas installé ta chaîne de compilation via le système de paquets (tu cherches vraiment à te compliquer la vie), tu devrais défaire ce que tu as fait et reprendre l'installation d'une chaîne de compilation saine, si possible en utilisant le système de paquets en faisant :
sudo apt install build-essential


Tu peux aussi afficher le contenu du fichier texte vers lequel pointe la chaîne de liens symboliques vers
ld
dans ton système, cela te donnera peut être un indice sur l'incident qui a causé le fait que tu te trouves avec une installation de
ld
non fonctionnelle. Henner Zeller, dont le nom apparaît dans les messages d'erreur de ta dernière capture est l'auteur de LED-matrix...

Une fois que tu as assaini ton installation de la chaîne de compilation, tente de nouveau de lancer
/usr/bin/ld
en ligne de commande et vérifie que tu as bien "/usr/bin/ld: no input files" en résultat, puis essaye de compiler le programme hello world. Une fois que tu as une chaîne de compilation fonctionnelle, tu peux envisager de compiler une bilbliothèque avec gcc et d'utiliser un EDI comme Geany pour programmer en C.
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021
937 >
Messages postés
5580
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
23 juin 2021

ton problème est-il résolu ?