Fichier include non trouve a l'appel d'une librairie par une autre

Bonjour

1/ Description du probleme :

Je me permets de soumettre ce post car je n’ai pas encore trouvé d’explication
Je rencontre un probleme de prise en compte des include à la compilation lorsque j’essaie d’appeler une librairie à partir d’une autre

Le post est assez long car je donne des explication sur mes différentes tentatives
Le paragraphe important est le 3/

Environnement IDE : 1.7.11 sous W8

2/ Le programme

J’ai créé une première librairie MotorDrv (MotorDrv.h + MotorDrv.cpp).
Il s’agit d’un objet driver de moteur (juste pour préciser le contexte).
Cette librairie est dans le répertoire des librairies …/arduino/libraries

Elle est utilisable à partir d’un fichier MotorDrvTst.ino

#include <MotorDrv.h>
a = MotorDrv ()

Je peux utiliser les méthodes de l’objet MotorDrv sans probleme
La librairie ne pose donc pas de probleme en elle meme

Ensuite, je crée une nouvelle entrée “Initio_v1” dans les librairies (Initio_v1.h + Initio_v1.cpp)
Il s’agit d’un objet “robot”
Cette librairie utilise l’objet MotorDrv et je fais donc les déclarations ci dessous dans Initio_v1.h :

#include <MotorDrv.h>
Class Initio_v1 
{
...
   MotorDrv *leftMotorDrv;
...
}

Dans Initio_v1.cpp j’instancie le pilote de moteur :

#include <Initio_v1.h>
Initio_v1::Initio_v1()
{
    ...
    this->leftMotorDrv = new MotorDrv ();
    ...    
}

Je declare l’objet Initio_v1 dans un croquis Initio_v1Tst.ino sans meme l’instancier dans un premier temps
J’ai juste la clause include : #include <Initio_v1.h>

3/ Erreur 1 : fichier include non trouvé pour la compilation de la librairie Initio_v1

A la compilation, j’obtiens le message ci dessous :
C:\Users\Herve\Documents\Arduino\libraries\Initio_v1/Initio_v1.h:3:22: fatal error: MotorDrv.h: No such file or directory

Si je modifie #include <MotorDrv.h> en spécifiant le chemin d’acces complet à MotorDrv, la compilation se passe correctement

4/ Erreur 2 : Pbm de linker

En laissant les chemins d’acces complets dans les include, j’insere dans Initio_v1Tst.ino, une instanciation de Initio_v1 :

Initio_v1 robot = Initio_v1 ();

J’obtiens l’erreur ci dessous :
C:\Users\Herve\AppData\Local\Temp\build755123542815125570.tmp\Initio_v1\Initio_v1.cpp.o: In function Initio_v1::Initio_v1()': C:\Users\Herve\Documents\Arduino\libraries\Initio_v1/Initio_v1.cpp:38: undefined reference to MotorDrv::MotorDrv(unsigned char, unsigned char, unsigned char, unsigned char)’
collect2.exe: error: ld returned 1 exit status

5/ Erreur 3 : Visibilite des types

Après pas mal de recherches, j’ai trouvé une phrase indiquant que les includes devaient être placé
dans le fichier .ino (ce qui me paraît étonnant)

J’ai donc supprimé #include <MotorDrv.h> de Initio_v1.h pour le placer directement en tete de Initio_v1Tst.ino

Cette fois j’ai l’erreur ci dessous :

C:\Users\Herve\Documents\Arduino\libraries\Initio_v1\Initio_v1.h:18:5: error: ‘MotorDrv’ does not name a type
MotorDrv *leftMotorDrv;

Pour cette erreur je pense que c’est l’ordre (alphabetique) de prise en compte des clauses include par le compilateur qui pose probleme

Je remercie d’avance toute personne qui aurait une idée sur le sujet

Cordialement

Bonjour

J'ai fini par trouver des explications détaillées sur :

La solution proposée fonctionne correctement

Cordialement