Problème de lecture d'un LSM9DS1 en I2C
Modérateur : Francois
-
- Raspinaute
- Messages : 629
- Enregistré le : mar. 6 janv. 2015 19:44
- Localisation : finistere
Re: Problème de lecture d'un LSM9DS1 en I2C
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?
@+
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
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
Re: Problème de lecture d'un LSM9DS1 en I2C
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 :il faut lui indiquer dans le linker , l'emplacement de la lib " .o "
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...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?
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
-
- 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
Bonjour à tous,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.
.
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>
Code : Tout sélectionner
#include"fichier.h"
Dès que j'ai 5 minutes, je la charge pour vérifier, en natif sur le pi.
A+
Sylvain
Re: Problème de lecture d'un LSM9DS1 en I2C
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 :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.
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 !spourre a écrit :Dans un premier temps, essayez simplement de donner le chemin absolu de la bibliothèque.
- RPi 3 + LibreELEC / RPi 3 + RetroPie / RPi B+ + Sense HAT ou Framboisedorf ou module caméra
- Arduino Mega, Uno, Nano
- Freescale FRDM KL25Z
-
- Raspinaute
- Messages : 629
- Enregistré le : mar. 6 janv. 2015 19:44
- Localisation : finistere
Re: Problème de lecture d'un LSM9DS1 en I2C
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
rpi 2 raspbian , server minecraft 24h/24 , utilisation gpio
orange pi pc debian ,utilisation gpio, motion cam
-
- 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
[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 ?
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 ?
-
- 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
[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 ! [/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.
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 ! [/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.
Re: Problème de lecture d'un LSM9DS1 en I2C
Directement dans la ligne de commande, à la suite des autres arguments ?guillaume9344 a écrit :Essayez de compiler votre programme en ajoutant directement les fichiers sources de la lib: les .cpp et les .h
J'ai suivi le ReadMe présent sur GitHub.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 ?
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").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 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
-
- Raspinaute
- Messages : 1589
- 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
Juste mon grain de sel au cas ou ...
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 :Je n'ai pas de fichier .o, seulement un seul .so.
Essaie avec -llsm9ds1 ou -llsm9ds1.soPinhapple a écrit :Si je rajoute -L/home/pi/Desktop/LSM9DS1 -lliblsm9ds1, la compilation échoue ("liblsm9ds1 introuvable").
- 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.
Re: Problème de lecture d'un LSM9DS1 en I2C
Ça fonctionne !destroyedlolo a écrit :Essaie avec -llsm9ds1
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
Code : Tout sélectionner
./ProgD
Code : Tout sélectionner
./ProgD: error while loading shared libraries: liblsm9ds1.so: cannot open shared object file: No such file or directory
- RPi 3 + LibreELEC / RPi 3 + RetroPie / RPi B+ + Sense HAT ou Framboisedorf ou module caméra
- Arduino Mega, Uno, Nano
- Freescale FRDM KL25Z