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

Visual C++ Discussion :

Linker une fonction d'un .lib


Sujet :

Visual C++

  1. #1
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    925
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 925
    Par défaut Linker une fonction d'un .lib
    Bonjour,

    Dans Visual Studio Je voudrais dans un .lib (librarie statique ) appeler (ou equivalent de linker) une fonction d'une autre .lib , mais en mode
    inline c'est à dire faire l'équivalence de "__forceinline", c'est à dire le compilateur
    incorpore à répetition le contenue de la fonction de l'autre .lib autant de fois que je l'appelle.

    Est - ce possible ?
    J'en aie besoin.

    Info : Les fonctions déclaré en inline definit dans une librarie statique ne sont pas exportable.

    Merci beaucoup

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    salut

    comme tu le dis toi-même : inline est lié au compilateur.
    je ne vois pas comment le linker pourrait faire ce boulot.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    C'est théoriquement réalisable avec des outils dédiés ou en traficotant les outils d'optimisation globale de VS, mais c'est éminemment complexe et vraiment fragile comme approche.

    Je suis très circonspect sur le bien fondé d'une telle approche.

    Normalement, les fonctions "inlinables" systématiquement sont facilement convertible en MACRO et cela ne pose pas de problème dans ce cas de les mettre directement dans les fichiers d'header de la lib.

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    925
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 925
    Par défaut
    J'ai un projet (a.lib) qui met 5 minutes à compiler ,
    cl.exe met enorme de temps à compiler car c'est un projet spéciale ,
    et je voudrais dans un autre (b.lib) que le compilateur recopie les code d'une fonction nommé "mafuncdea" du projet (a.lib) autant de fois que j'appelle la fonction "mafuncdea" dans le projet (b.lib) definit dans le projet (a.lib).

    voilà ;

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    J'ai un projet (a.lib) qui met 5 minutes à compiler ,
    cl.exe met enorme de temps à compiler car c'est un projet spéciale ,
    J'ai travaillé sur des projets dont la compilation complète du projet prenait 8 heures sur un octo-pro et de la RAM à foisons et 1h30 au minimum, avant que je ne fasse un découpage par Dll, cela relative votre " enorme de temps".

    Pourquoi ne pas en faire une MACRO ?
    Pourquoi ne pas faire un projet de lib spécifique ?
    Pourquoi le code source de cette fonction n'est pas transférer du projet a.lin au projet b.lib ?

    Vous ne donnez pas assez de détails pour justifier d'une approche aussi peu orthodoxe.

  6. #6
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    925
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 925
    Par défaut
    Citation Envoyé par bacelar Voir le message
    J'ai travaillé sur des projets dont la compilation complète du projet prenait 8 heures sur un octo-pro et de la RAM à foisons et 1h30 au minimum, avant que je ne fasse un découpage par Dll, cela relative votre " enorme de temps".

    Pourquoi ne pas en faire une MACRO ?
    Pourquoi ne pas faire un projet de lib spécifique ?
    Pourquoi le code source de cette fonction n'est pas transférer du projet a.lin au projet b.lib ?

    Vous ne donnez pas assez de détails pour justifier d'une approche aussi peu orthodoxe.
    En faites , il s'agit de licences numérique pour mes applications / utilitaires que je vend ,et je fais en sorte pour décourager le crackeur( pirate).

    Mon idée :
    un .lib (a.lib) qui gére le decodage de mes licence qui met un plomb à compiler
    un .lib (b.lib) qui gére l'affichage d'information utilisateur et les droits d'utilisation de telle fonction(s) de mes applications.

    Pour gagner du temps à chaque modification de la lib b.lib ,c'est inliner la fonction de decodage de licence depuis le lib "a.lib" ,c'est la meilleur solution car si pas inliner il suffit que le crackeur remplace l'instruction d'appelle "CALL" par une autre fonction et le tour est jouer.

    Pour le moment tout est dans le même .lib.

  7. #7
    Membre émérite
    Homme Profil pro
    R&D imagerie 3D / prog embarquée
    Inscrit en
    Mars 2007
    Messages
    419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : R&D imagerie 3D / prog embarquée
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2007
    Messages : 419
    Par défaut
    Salut,

    Comme l'a dit fregolo52, l'inlining est une fonction du compilateur et non du linker. Tu ne peux donc pas inliner tes fonctions à l'extérieur de ta lib en fournissant seulement le header.

    Par contre, tu peux implémenter directement ta fonction dans le .h et ça marchera puisque ta fonction sera inlinée une fois à la compil de a et une autre à la compil de b.

    Ce que je ne comprend pas, c'est ce que tu veux distribuer. Est-ce :
    - Les lib statiques a et b
    - Une lib statique c qui serait un link de a et b
    - Un exe à partir de a et b
    - Une DLL à partir de a et b

    Si tu distribues une lib c, un exe ou une DLL, pas de pb les calls à a ne pourront pas être remplacés comme ça.
    Pour a et b, je vois pas trop pourquoi tu voudrais faire ça.

  8. #8
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    925
    Détails du profil
    Informations personnelles :
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Mai 2011
    Messages : 925
    Par défaut
    Citation Envoyé par djuju Voir le message
    Salut,

    Comme l'a dit fregolo52, l'inlining est une fonction du compilateur et non du linker. Tu ne peux donc pas inliner tes fonctions à l'extérieur de ta lib en fournissant seulement le header.

    Par contre, tu peux implémenter directement ta fonction dans le .h et ça marchera puisque ta fonction sera inlinée une fois à la compil de a et une autre à la compil de b.

    Ce que je ne comprend pas, c'est ce que tu veux distribuer. Est-ce :
    - Les lib statiques a et b
    - Une lib statique c qui serait un link de a et b
    - Un exe à partir de a et b
    - Une DLL à partir de a et b

    Si tu distribues une lib c, un exe ou une DLL, pas de pb les calls à a ne pourront pas être remplacés comme ça.
    Pour a et b, je vois pas trop pourquoi tu voudrais faire ça.
    Je distribue l'exe ou la dll utilisant la lib b.

    Mais tanpis je ferai que sur un seule .lib qui utilise les header h mais pas les macros.

    Peux être faire ce genre chose avec l'intrinsic ?

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 487
    Par défaut
    Je ne comprends pas pourquoi vous ne voulez pas utiliser de MACRO.
    C'est l'un des seuls cas ou cela se justifie pleinement ?
    Avec les macros, dans un .h, vous avez plus de problème, non ?
    Pas lib et pas de call.
    Ce n'est pas le top pour la compatibilité inter-compilation ou la maintenance mais faut faire des compromis.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/06/2011, 15h24
  2. Réponses: 5
    Dernier message: 11/05/2011, 09h27
  3. Réponses: 4
    Dernier message: 22/07/2010, 17h55
  4. Réponses: 1
    Dernier message: 30/01/2010, 22h51
  5. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14

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