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

C++Builder Discussion :

.lib et #pragma link


Sujet :

C++Builder

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut .lib et #pragma link
    Suite à un autre message, je distribue mes classes sous la forme d'une librairie statique (.lib) et avec les headers (.h et .dfm pour les fiches)

    Pour utiliser ces fichiers, je dois:
    1) Inclure les fichiers .lib dans le projet
    2) Avoir les fichiers .h et .dfm dans un répertoire accessible pour les includes (répertoire du projet ou répertoire ajouté à l'option "Include search path")

    A ce moment, j'ai plusieurs cas où tout fonctionne correctement. Par contre, dès que j'utilise la JVCL, les fichiers indiqués par les "#pragma link" dans le code de la lib me cause une erreur.

    Par exemple:
    test.cpp contient un TJvTransparentButton. J'ai donc quatre pragma link ajoutés automatiquement pas BDS:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #pragma package(smart_init)
    #pragma link "JvButton"
    #pragma link "JvComponent"
    #pragma link "JvExControls"
    #pragma link "JvTransparentButton"
    Le compilateur est heureux, mais le linker me fait systématiquement une erreur "Fatal: Unable to open file 'JVBUTTON.OBJ'". D'après la doc sur les #pragma link, il fait un appriori sur une extention ".obj". Pourtant lorsque je link le même projet mais à partir du .cpp tout se passe bien!

    Quelqu'un a-t-il une idée??

    PS: Il y a bien un fichier "JvButton.pas" dans le répertoire jvcl/run, mais l'inclure directement dans mon projet ne m'amène que d'autres erreurs...

  2. #2
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    Pourquoi ne pas spécifier l'extension ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #pragma link "JvButton.lib"
    Ou bien n'ai-je pas bien compris le problème ?

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    En fait, JvButton n'est pas une lib... Je ne sais pas exactement ce que c'est d'ailleurs car j'ai seulement trouvé un fichier JvButton.pas dans le répertoire de la jvcl. Probablement que le code objet se trouve dans l'un des package qu'installe la jvcl, mais il ne porte en tout cas pas le nom de JvButton.???

    Pour l'instant, j'ai sorti les fichiers à problème de ma librairie et les distribue en clair, mais ce n'est pas vraiment satisfaisant :-(

    J'ai aussi eu un problème avec une classe qui hérite d'une autre classe se trouvant dans la librairie.

    Exemple:
    1) la librairie contient une classe "toto" avec une méthode public "saveall()"
    2) dans mon projet, j'intègre la librairie contenant toto
    3) je dérive une classe "myToto" qui surcharge "saveall()":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class myToto : public toto {
    public:
      void saveall() {
         // do my stuff
         toto::saveall();
      }
    }
    Et bien le linker me dit qu'il ne connaît pas la méthode toto:saveall()...

    Là aussi, je suis obligé de sortir ma classe de la librairie, mais ce qui est frustrant c'est que je ne sais psa pourquoi :-(

  4. #4
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    Les erreurs de link sont un problème récurrent chez Borland. En général, on les résout en changeant l'ordre des éléments dans le gestionnaire de projets (les .lib avant les .cpp, je crois). Par contre, lorsqu'on fait des #pragma link, je ne sait pas dans quel ordre il les met.

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Juin 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 351
    Points : 446
    Points
    446
    Par défaut
    C'est un peu tard pour fermer ce post que j'avais un peu oublié...

    Donc j'avais supprimé tous mes pragma et en enregistrant le fichier BDS2006 m'a reconstruit une liste qui fonctionnait... J'ai pas très bien compris, mais ça marche!

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 09/02/2010, 10h26
  2. Nécessité des #pragma link sous 2007
    Par Invité dans le forum C++Builder
    Réponses: 0
    Dernier message: 30/08/2009, 19h51
  3. Réponses: 7
    Dernier message: 11/11/2005, 12h51
  4. Link .LIB [DLL]
    Par taron dans le forum MFC
    Réponses: 3
    Dernier message: 09/11/2005, 17h32
  5. Pragma lib où le mettre ?
    Par Sephi dans le forum MFC
    Réponses: 2
    Dernier message: 16/02/2004, 23h50

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