Problème de lecture d'un LSM9DS1 en I2C

Des infos, des conseils sur les bus DSI,CSI, I2C, SPI... du Raspberry Pi

Modérateur : Francois

Répondre
guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: Problème de lecture d'un LSM9DS1 en I2C

Message par guillaume9344 » jeu. 9 mars 2017 09:59

Bonjour,
je pense surtout que le compilateur ne trouve pas la librairie.Par exemple pour code::blocks, il faut lui indiquer dans le linker , l'emplacement de la lib " .o "
Après les cours sur la cross compilation de nos deux compères Bud et Spourre , qu'avez vous choisi comme solution de compilation ou logiciel , IDE , .....pour écrie vos programmes?
@+
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

Pinhapple
Raspinaute
Messages : 125
Enregistré le : jeu. 23 févr. 2017 15:53
Localisation : Rouen

Re: Problème de lecture d'un LSM9DS1 en I2C

Message par Pinhapple » jeu. 9 mars 2017 10:04

guillaume9344 a écrit :il faut lui indiquer dans le linker , l'emplacement de la lib " .o "
Il y a un fichier liblsm9ds1.so dans le dossier lib des fichier du ZIP téléchargé, ça peut être ça ?
guillaume9344 a écrit :Après les cours sur la cross compilation de nos deux compères Bud et Spourre , qu'avez vous choisi comme solution de compilation ou logiciel , IDE , .....pour écrie vos programmes?
Faute d'avoir Internet sur mon RPi pour télécharger un IDE, je code "à la main" sur Leafpad et je compile avec le terminal... :oops:

J'ai mon fichier ProgD.cpp qui contient le code, je le compile avec le terminal en faisant g++ ProgD.cpp -o ProgD -lwiringPi, et s'il compile avec succès, je lance le programme avec ./ProgD.

Il y a moyen de joindre le fichier .so à mon code, comme avec les include ? Au moment de compiler, je rajoute -lliblsm9ds1 à ma commande, mais la bibliothèque est apparemment introuvable.

Si je dois télécharger Code::Blocks depuis un ordinateur ayant accès à Internet, je prends la version 32 ou 64 bits sur le site officiel ?
Sinon je peux attendre d'être chez moi pour brancher le RPi à Internet et faire un sudo apt-get install codeblocks.
  • RPi 3 + LibreELEC / RPi 3 + RetroPie / RPi B+ + Sense HAT ou Framboisedorf ou module caméra
  • Arduino Mega, Uno, Nano
  • Freescale FRDM KL25Z

spourre
Raspinaute
Messages : 735
Enregistré le : lun. 22 déc. 2014 16:50
Localisation : 67380 LINGOLSHEIM

Re: Problème de lecture d'un LSM9DS1 en I2C

Message par spourre » jeu. 9 mars 2017 11:49

Pinhapple a écrit :
Il y a moyen de joindre le fichier .so à mon code, comme avec les include ? Au moment de compiler, je rajoute -lliblsm9ds1 à ma commande, mais la bibliothèque est apparemment introuvable.
.
Bonjour à tous,

Une réponse rapide juste pour donner une piste qui complète l'analyse de Guillaume.

1) Si j'ai bien compris, la bibliothèque a juste été décompressée dans un répertoire où se trouvent les fichiers entête (*.h)et bibliothèque partagée (*.so).
Il n'y a donc pas eu de procédure classique pour mettre la lib dans /usr/lib et le header dans /usr/include.

Ce n'est pas une hérésie et mon analyse semble être confirmée par l'examen du bout de code:
Notez bien la différence entre la directive :

Code : Tout sélectionner

#include<fichier.h>
et:

Code : Tout sélectionner

#include"fichier.h"
Dans un premier temps, essayez simplement de donner le chemin absolu de la bibliothèque.
Dès que j'ai 5 minutes, je la charge pour vérifier, en natif sur le pi.
A+

Sylvain

Pinhapple
Raspinaute
Messages : 125
Enregistré le : jeu. 23 févr. 2017 15:53
Localisation : Rouen

Re: Problème de lecture d'un LSM9DS1 en I2C

Message par Pinhapple » jeu. 9 mars 2017 12:00

spourre a écrit :Si j'ai bien compris, la bibliothèque a juste été décompressée dans un répertoire où se trouvent les fichiers entête (*.h)et bibliothèque partagée (*.so).
Il n'y a donc pas eu de procédure classique pour mettre la lib dans /usr/lib et le header dans /usr/include.
J'ai téléchargé le ZIP, j'ai extrait le dossier sur le bureau du RPi, et ensuite dans le terminal je me suis placé dans le dossier et j'ai fait make.
spourre a écrit :Dans un premier temps, essayez simplement de donner le chemin absolu de la bibliothèque.
Avec le même code C++, j'ajoute juste #include "/home/pi/Desktop/LSM9DS1/liblsm9ds1.so", ce qui me renvoie une centaine d'erreurs et de warnings à la compilation ! :shock:
  • RPi 3 + LibreELEC / RPi 3 + RetroPie / RPi B+ + Sense HAT ou Framboisedorf ou module caméra
  • Arduino Mega, Uno, Nano
  • Freescale FRDM KL25Z

guillaume9344
Raspinaute
Messages : 629
Enregistré le : mar. 6 janv. 2015 19:44
Localisation : finistere

Re: Problème de lecture d'un LSM9DS1 en I2C

Message par guillaume9344 » jeu. 9 mars 2017 12:45

Essayez de compiler votre programme en ajoutant directement les fichiers sources de la lib: les .cpp et les .h
rpi b+ ,osmc, motioneyes
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam

spourre
Raspinaute
Messages : 735
Enregistré le : lun. 22 déc. 2014 16:50
Localisation : 67380 LINGOLSHEIM

Re: Problème de lecture d'un LSM9DS1 en I2C

Message par spourre » jeu. 9 mars 2017 12:58

[quote="Pinhapple"
J'ai téléchargé le ZIP, j'ai extrait le dossier sur le bureau du RPi, et ensuite dans le terminal je me suis placé dans le dossier et j'ai fait make.
[/quote]

OK, il n’y a pas de make install pour mettre les fichiers au bon endroit ?
avez-vous un fichier texte du style README ou INSTALL qui donne , en général, un minimum d'explications ?

spourre
Raspinaute
Messages : 735
Enregistré le : lun. 22 déc. 2014 16:50
Localisation : 67380 LINGOLSHEIM

Re: Problème de lecture d'un LSM9DS1 en I2C

Message par spourre » jeu. 9 mars 2017 13:19

[quote="Pinhapple"
Avec le même code C++, j'ajoute juste #include "/home/pi/Desktop/LSM9DS1/liblsm9ds1.so", ce qui me renvoie une centaine d'erreurs et de warnings à la compilation ! :shock:[/quote]

Je fais bref car le serveur a avalé ma réponse plus complète ;-)
dans le source, la directive #include attend un fichier texte, *.h, pour connaître toutes les variables et fonctions qui seront utilises.

Su la ligne de commande, l'éditeur de liens (linker) qui sera invoqué doit connaître tous les fichiers binaires objet (*.o) et les bibliothèques partagées utilisées par le projet.
Normalement, ces fichiers sont placés à des emplacements standards, sinon, il faut donner le chemin absolu.

Pinhapple
Raspinaute
Messages : 125
Enregistré le : jeu. 23 févr. 2017 15:53
Localisation : Rouen

Re: Problème de lecture d'un LSM9DS1 en I2C

Message par Pinhapple » jeu. 9 mars 2017 13:31

guillaume9344 a écrit :Essayez de compiler votre programme en ajoutant directement les fichiers sources de la lib: les .cpp et les .h
Directement dans la ligne de commande, à la suite des autres arguments ?
spourre a écrit :OK, il n’y a pas de make install pour mettre les fichiers au bon endroit ?
avez-vous un fichier texte du style README ou INSTALL qui donne , en général, un minimum d'explications ?
J'ai suivi le ReadMe présent sur GitHub. ;)
spourre a écrit :dans le source, la directive #include attend un fichier texte, *.h, pour connaître toutes les variables et fonctions qui seront utilises.

Su la ligne de commande, l'éditeur de liens (linker) qui sera invoqué doit connaître tous les fichiers binaires objet (*.o) et les bibliothèques partagées utilisées par le projet.
Normalement, ces fichiers sont placés à des emplacements standards, sinon, il faut donner le chemin absolu.
Je n'ai pas de fichier .o, seulement un seul .so. Si je rajoute -L/home/pi/Desktop/LSM9DS1 -lliblsm9ds1, la compilation échoue ("liblsm9ds1 introuvable").

Je vais télécharger Code::Blocks ce soir en rentrant et je réessaierai calmement étape par étape, je vous tiendrai au courant !

Merci pour votre aide ! :)
  • RPi 3 + LibreELEC / RPi 3 + RetroPie / RPi B+ + Sense HAT ou Framboisedorf ou module caméra
  • Arduino Mega, Uno, Nano
  • Freescale FRDM KL25Z

destroyedlolo
Raspinaute
Messages : 1585
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: Problème de lecture d'un LSM9DS1 en I2C

Message par destroyedlolo » jeu. 9 mars 2017 14:39

Juste mon grain de sel au cas ou ...
Pinhapple a écrit :Je n'ai pas de fichier .o, seulement un seul .so.
un .so est un "objet partagé" qui sera liée dynamiquement au moment de l'exécution. En d'autres termes, il devra TOUJOURS etre accessible après la compilation.
Pinhapple a écrit :Si je rajoute -L/home/pi/Desktop/LSM9DS1 -lliblsm9ds1, la compilation échoue ("liblsm9ds1 introuvable").
Essaie avec -llsm9ds1 ou -llsm9ds1.so
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

Pinhapple
Raspinaute
Messages : 125
Enregistré le : jeu. 23 févr. 2017 15:53
Localisation : Rouen

Re: Problème de lecture d'un LSM9DS1 en I2C

Message par Pinhapple » jeu. 9 mars 2017 15:36

destroyedlolo a écrit :Essaie avec -llsm9ds1
Ça fonctionne ! :shock:
Je pensais pourtant avoir essayé toutes les combinaisons : avec/sans extension, avec/sans le dernier slash, avec/sans les majuscules, etc. !
EDIT : Ah en fait non, j'essayais avec -lliblsm9ds1 !

Merci beaucoup ;)

Maintenant ça me renvoie une erreur quand je lance le programme...
Pour résumer : je compile avec

Code : Tout sélectionner

g++ ProgD.cpp -o ProgD -lwiringPi -L/home/pi/Desktop/LSM9DS1 -llsm9ds1
Et je lance le programme avec

Code : Tout sélectionner

./ProgD
Cette dernière commande me renvoie l'erreur suivante :

Code : Tout sélectionner

./ProgD: error while loading shared libraries: liblsm9ds1.so: cannot open shared object file: No such file or directory
J'imagine que j'ai un ou plusieurs arguments à ajouter à ma commande ?
  • RPi 3 + LibreELEC / RPi 3 + RetroPie / RPi B+ + Sense HAT ou Framboisedorf ou module caméra
  • Arduino Mega, Uno, Nano
  • Freescale FRDM KL25Z

Répondre

Retourner vers « Les BUS interfaces »