IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Unité introuvable pour un composant [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut Unité introuvable pour un composant
    Bonjour à toutes et à tous,

    Un petit problème que je rencontre depuis longtemps et qui n'a rien à voir avec les mises à jour.

    Lorsque je dépose un composant sur une fiche et que je compile le projet, tantôt cela se passe sans problème ; tantôt on me dit que l'unité n'est pas trouvé et alors je dois aller la chercher pour la placer dans "Chemin" des Options du projet afin de pouvoir compiler.

    Une idée du problème ?

    Cordialement.

    Pierre

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut

    En fait ce genre de problème vient du fait que dans la majorité des cas, le développeur n'a pas configuré correctement les chemins de sortie dans le paquet. Cela arrive le plus souvent lorsque tu compiles en mode debug et passes en realase et vice et versa. C'est du même genre que le message d attention : "Unité dupliquée bla bla bla....." Le mieux c'est de faire menu -> Executer -> Nettoyer et construire

    voici par exemple le genre de chemin que j'ai dans mes paquets dans Options --> "Chemins" --> "Répertoires de sortie pour les unités : "lib\nom_de_mon_paquet\$(TargetOS)\$(BuildMode)\$(TargetCPU)"
    ce qui assure que les unités compilées ne se mélangent pas entre les différents mode de compilations, os et type de processeurs et que chaque paquet a ainsi son propre dossier de sortie. Ce qui évite les collisions et croisement entre les fichiers compilés. Chose à laquelle il faut faire attention lorsque tu développes des paquets de composant et surtout si il y a des dépendances avec d'autres paquets (et même sans d'ailleurs)

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    J'ai la même strucure de sortie des unités dans toutes mes application, que ça le fasse ou non : lib\$(TargetCPU)-$(TargetOS)

    Je me suis amusé à éditer les fichiers *.lpi : c'est le vrai foutoir, il devrait y avoir un utilitaire de nettoyage de ces fichiers. Je dis cela car il m'est arrivé d'y supprimer des données sans que cela n'ait de répercussion sur le fonctionnement de l'application.

    Dans une application où j'utilise un composant de la librairie "abbrevia" et où ça le fait, j'ai noté qu'il y avait dans le fichier lpi cette ligne : <PackageName Value="Abbrevia"/> alors qu'elle ne l'était pas dans l'application où ça le faisait pas. J'ai alors rajouté cette ligne dans cette dernière application et dès lors, elle ne m'a plus dit qu'elle ne trouvait pas la librairie ???!!!

    Cordialement.

    Pierre.

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ChPr Voir le message
    J'ai la même strucure de sortie des unités dans toutes mes application, que ça le fasse ou non : lib\$(TargetCPU)-$(TargetOS)

    Je me suis amusé à éditer les fichiers *.lpi : c'est le vrai foutoir, il devrait y avoir un utilitaire de nettoyage de ces fichiers. Je dis cela car il m'est arrivé d'y supprimer des données sans que cela n'ait de répercussion sur le fonctionnement de l'application.

    Dans une application où j'utilise un composant de la librairie "abbrevia" et où ça le fait, j'ai noté qu'il y avait dans le fichier lpi cette ligne : <PackageName Value="Abbrevia"/> alors qu'elle ne l'était pas dans l'application où ça le faisait pas. J'ai alors rajouté cette ligne dans cette dernière application et dès lors, elle ne m'a plus dit qu'elle ne trouvait pas la librairie ???!!!

    Cordialement.

    Pierre.
    Salut, si tu as ajouté <PackageName Value="Abbrevia"/> à la main, c'est simplement qu'il te manquait sa dépendance. Pour ajouter un paquet dans les dépendances de ton projet c'est il suffit de faire un clique droit ici :

    Nom : 2020-01-29_174913.png
Affichages : 149
Taille : 7,8 Ko

    et d'aller chercher le paquet (compilé pour le runtime)


    EDIT :
    Citation Envoyé par ChPr Voir le message
    J'ai la même strucure de sortie des unités dans toutes mes application, que ça le fasse ou non : lib\$(TargetCPU)-$(TargetOS)
    Oui mais cela n'a rien avoir avec ceux des paquets

    par exemple pour mon paquet BZScene_rt j'ai

    lib\bzscene\$(TargetOS)\$(BuildMode)\$(TargetCPU)

    et dans BZScene_Image_rt j'ai

    lib\bzcene-image\$(TargetOS)\$(BuildMode)\$(TargetCPU)

    qui lui contient également le paquet BZScene_rt en dépendance

    Voila une partie de la structure des dossiers de mon projet

    Nom : 2020-01-29_175620.png
Affichages : 124
Taille : 10,6 Ko

    Comme tu peux le voir dans le dossier "Package" c'est la que sont mis les fichiers compilés de la bibliothèque en fonction de l'os, du type de cpu et du mode de construction et de sont nom choisis dans les différentes Applications test (je doit encore uniformiser un peu tout ça , car c'est encore un peu le bazar)

    Si tu regardes dans le dossier lib de ton application les fichiers compilés des bibliothèques que tu utilises (disons Abbrevia par exemple ) ne sont pas présent dans celui-ci

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Membre éprouvé
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 022
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 022
    Points : 1 049
    Points
    1 049
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    ... Si tu regardes dans le dossier lib de ton application les fichiers compilés des bibliothèques que tu utilises (disons Abbrevia par exemple ) ne sont pas présent dans celui-ci ...
    C'est normal, les fichiers compilés doivent se trouver "seulement" dans le répertoire du composant.

    Pour autant , cela n'explique pas pourquoi, dans deux applications (a priopri) de structures identiques, sur un même PC, dans le même environnement, ... (manipulations faites pour ces deux applications l'une après l'autre sans avoir quitté Lazarus), dans un cas la bibliothèque a été trouvée et pas dans l'autre.

    Cordialement.

    Pierre

  6. #6
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par ChPr Voir le message
    C'est normal, les fichiers compilés doivent se trouver "seulement" dans le répertoire du composant.

    Pour autant , cela n'explique pas pourquoi, dans deux applications (a priopri) de structures identiques, sur un même PC, dans le même environnement, ... (manipulations faites pour ces deux applications l'une après l'autre sans avoir quitté Lazarus), dans un cas la bibliothèque a été trouvée et pas dans l'autre.

    Cordialement.

    Pierre
    C'est du au fait que FPC lorsqu'il existe plusieurs fichiers compilés d'une même unité, ne sait pas laquelle prendre. Ou il suffit de faire un petit changement dans le code, et que parfois ce minuscule changement ne soit pas détecté.
    Il faut faire Nettoyer et construire pour remettre à jour le cache des fichiers. Et cela est encore plus vraie lorsque tu passes d'un mode de construction à l'autre ou par exemple tu compiles sous Linux, tu reviens sous Windows et paf le fichier n'est plus trouvé car il ne correspond pas (plus) à la plateforme ou au mode de construction (car le dossier de sortie est le même pour tout).
    C'est pour cela que la déclaration dans les paquets de composants (et même les applications, surtout si tu veux quelle soit portable d'un environnement à l'autre) est très importante et beaucoup développeurs oublient ce détail.
    Sous Delphi les chemins sont très bien séparés et l'EDI s'occupe presque de tout, c'est quasi transparent pour le développeur et il n'a pas à y faire attention à contrario de FPC/Lazarus.

    A+

    Jérôme
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Runtime] TransferDatabase ne se fait pas
    Par podz dans le forum Runtime
    Réponses: 15
    Dernier message: 24/01/2006, 10h47
  2. Scroll comboBox ne fait pas défiler les ItemData !
    Par Tchupacabra dans le forum IHM
    Réponses: 4
    Dernier message: 09/12/2005, 09h13
  3. Int 21H AX=716Ch ne fait pas mon affaire !!
    Par TheBigMac dans le forum Assembleur
    Réponses: 4
    Dernier message: 10/09/2004, 20h51
  4. Pb de selection qui ne se fait pas
    Par Stef.proxi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/08/2004, 10h54
  5. [SQL Server 8] le join ne se fait pas
    Par Baquardie dans le forum Langage SQL
    Réponses: 10
    Dernier message: 29/07/2004, 14h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo