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++ Discussion :

Compiler une fonction d'une librairie statique lors de la compilation de l'executable.


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Compiler une fonction d'une librairie statique lors de la compilation de l'executable.
    Bonjour,

    J'ai créé une librairie statique (un .h et un .lib).
    Je voudrai qu'une de mes fonctions soit compilée non pas lors de la compilation du .lib mais lors de la compilation de l'exécutable utilisant ce .lib.
    En effet, cette fonction à besoin de calculer la date de build de l'exécutable (avec __DATE__ et __TIME__)(et non pas la date de build de la lib).

    Définir la fonction dans le .h au lieu du .cpp ne suffit pas
    Est ce que c'est possible et comment ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Ca, c'est -- a priori -- pas possible... Du moins, pas de manière classique

    Car le but d'une bibliothèque est, justement, de faire en sorte que toutes les fonctions qu'elle expose soient compilées de manière séparée AVANT que l'exécutable qui utilisera ces fonctions ne soit compilé

    De plus, on peut décemment se poser la question de la raison pour laquelle la bibliothèque, qui est sensée être "aussi indépendante que possible" devrait commencer à s'inquiéter de la date de la compilation de l'application dont elle n'a absolument "rien à foutre"...

    Dans le meilleur des cas -- comprends: s'il est vraiment parfaitement justifié d'avoir ce type de besoin (ce dont je doute très sincèrement :$ ) -- cela occasionnerait des dépendances circulaire de très mauvais aloi, car, s'il est parfaitement "normal" qu'une application dépende d'une bibliothèque (voir même de plusieurs ), il n'y a normalement aucune raison de rendre une bibliothèque dépendante de l'application (qui dépend de la bibliothèque), alors que l'on est sensé ne savoir absolument rien de l'application au moment où l'on développe la bibliothèque
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Ok. L'idée était de fournir une fonction utilitaire calculant la date de build de l'application dans un format particulier sans avoir à fournir de code source supplémentaire pour l'utilisateur.

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Si cette fonction n'a pas vocation à être appelée depuis la bibliothèque, tu peux en faire une fonction inline dans le fichier d'en-tête de celle-ci.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2016
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Je vais tester. Merci

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Sinon tu utilises les fonctions time ou std::chrono pour créer ça et non les constantes de compilation.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Sinon tu utilises les fonctions time ou std::chrono pour créer ça et non les constantes de compilation.
    Y a-t-il quoi que ce soit de compile-time là-dedans?
    Ou d'extraction de timestamp d'exécutable?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 629
    Points : 10 554
    Points
    10 554
    Par défaut
    De toute manière , on parle de génération de "quelque chose" avec la date de compilation de l'application.
    Or cette génération ne peut se faire si on appelle cette fonction.
    Par conséquent, que cette date soit en variable locale (et donc dans la bibliothèque) ou passée en paramètre (et donc transmise par l'application) ne change pas grand chose

    Ai-je loupé 1 truc ?

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Non y'a rien de compile time en effet.
    Mais la demande initiale a peu de sens.
    - Soit on veut la compile time de la lib, et donc les constantes sont quelque part compilées dans la lib.
    - Soit on veut la compile time du programme, et donc c'est bien évidemment au programme de les fournir.
    La lib peut proposer une macro pour simplifier son utilisation par le programme, mais elle ne peut pas deviner quand le programme est compilé.
    Une fonction header only / inline ne sera pas compilée dans la lib et peut s'en charger.
    Une fonction constexpr devrait aussi faire l'affaire.
    std::chrono peut alors servir pour la manipulation dans une fonction compilée de la lib.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  10. #10
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    On dirait un cas de problème XY. Ta question ne serait- pas plutôt : "comment une bibliothèque statique peut connaitre le timestamp de build d'une application où elle est utilisée ?" ?

    Je suppose que ta bibliothèque n'a pas besoin du timestamp de son propre build, sinon tu ne serais pas venu poser de question ici.

    Je suppose donc que ta bibliothèque fournit des fonctions qui utilise le timestamp du build de l'application complète (c'est ce que je comprend d'un de tes messages). Ces fonctions ne vont pas magiquement s'exécuter au lancement de ton application : tu vas les appeler, de manière direct ou indirecte. Tu as donc le contrôle sur ce qu'il se passe avant que le timestamp soit utilisé.

    Si tu utilises tes fonctions de manière directe, tu peux passer le timestamp en paramètre. L'idée d'une fonction inline dans un header, suggérée par Médinoc, sera également efficace.

    Si tu utilises tes fonctions de manière indirecte (tu appelles d'autres fonctions qui appellent les fonctions qui ont besoin du timestamp), tu peux fournir le timestamp dans une phase préalable d'initialisation de ta bibliothèque.

    Attention à un détail : l'heure de compilation d'un fichier particulier peut être antérieure à l'heure de création de l'exécutable.

Discussions similaires

  1. [MEX] Incorporer une librairie externe lors de la compilation
    Par Grasshoper dans le forum MATLAB
    Réponses: 2
    Dernier message: 12/05/2017, 19h15
  2. Compiler une librairie statique
    Par yann458 dans le forum Visual C++
    Réponses: 1
    Dernier message: 03/12/2012, 16h09
  3. Réponses: 1
    Dernier message: 24/11/2012, 16h38
  4. Réponses: 2
    Dernier message: 28/07/2010, 15h31
  5. Réponses: 1
    Dernier message: 20/06/2007, 12h34

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