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 :

Recompiler une librairie dynamique (DLL) en statique


Sujet :

C++

  1. #1
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 528
    Points : 5 197
    Points
    5 197
    Par défaut Recompiler une librairie dynamique (DLL) en statique
    Bonjour,

    j'ai un programme qui utilise un fichier lib qui fait appel à une dll, j'ai possibilité de recompiler le fichier lib puisque les sources sont distribuées et comme je n'aime pas les dll je me suis dis que j'allais recompiler la librairie en statique

    chose dite chose faite j'ai recompilé tout ca sans problème, su moins dans un premier temps

    les problèmes arrivent lorsque mon programme qui fonctionnait avec la librairie dynamique crée des erreurs de linkage "extern non résolu" en rapport avec la librairie qui est maintenant statique

    quelqu'un aurait-il déjà fait ce genre d'expérience et comment résoudre ce problème ? bien qu'à mon avis je vais devoir procéder à diverses modificatinos dans le code de la libraire

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Si tu as le projet qui permet de compiler la dll, regarde les fichiers .lib dont elle dépend.
    Tu as alors 2 solutions:
    - soit tu ajoutes ces .lib à ton projet lib statique
    - soit tu ajoutes ces .lib à ton exe, en + de ta lib statique
    la 1° solution est la plus simple à utiliser : tu as un .lib tout pret utilisable tout seul. Mais... les .lib que tu rajoutes sont "copié-collés" dans ton nvx .lib. Si par malheur ton exe utilise aussi ces .lib, tu vas avoir des symboles définis plusieurs fois. Donc faut être prudent...

    Donne quelques exemples de symboles nons résolus.

  3. #3
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    encore plus simple : tu utilise dll2lib, un petit logiciel qui te permet de transformer une DLL en une lib statique utilisable pour peut que tu ai les .h (ce qui est ton cas)...

  4. #4
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 528
    Points : 5 197
    Points
    5 197
    Par défaut Dll2Lib testé
    J'ai testé ce petit logiciel qui me semblait bien sympathique de part son nom seulement d'une part les mêmes problèmes se posent et après divers essais j'obtiens des conflits

    je vous tiens au courant si j'arrive à quelque chose avec différents paramètres

    PS: j'avais oublié de linker 2 libs lors du passage en statique

  5. #5
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 528
    Points : 5 197
    Points
    5 197
    Par défaut Après quelques essais
    Merci pour cette réponse rapide,

    Effectivement je n'avais pas prété attention aux librairies qui étaient linkées avec la DLL, j'ai donc tenté de corriger le problème de différentes manières

    j'ai d'abord essayé de recréer la lib en ajoutant les lib manquantes au link, problème de conflits avec libcmt.lib et msvcrt.lib (le prog et la dll sont multithread)
    si j'exclu libcmt.lib ca ne change rien tandis que si j'exclu msvcrt.lib je me retrouve avec les fonctions fopen, printf, etc... en extern non résolues

    j'ai aussi essayé de créer les lib statiques en demandant d'exclure toutes les lib par défaut mais cela ne résoud rien

    je vais me plonger un peu plus dans les méandres des options de compilation, en attendant si vous avez un conseil (ou +) je suis prenneur
    la suite au prochain épisode

    PS: je suis sous Visual Studio 7

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    compile ta lib statique en multithread.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Messages fusionnés, merci d'éviter le multipost à l'avenir


  8. #8
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 528
    Points : 5 197
    Points
    5 197
    Par défaut Résolution partielle
    Oki, désolé pour le multi post

    la dll a bien été recompilée en multithread, en fait à la base il y a le projet VC7 pour compiler la lib en dynamique, je vais dans les paramètres et je modifie l'option "Type de configuration" en "Bibliothèque statique (.lib)"

    ensuite je vais ajouter les librairies manquantes dans "dépendances supplémentaires" et je compile sans problème

    j'ai essayé de compiler les exemples et ca fonctionne
    le problème se situe donc dans mes paramètres de compilation
    j'approche peut-etre du but, je continue de chercher...

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    j'ai essayé de compiler les exemples et ca fonctionne
    le problème se situe donc dans mes paramètres de compilation
    si ça fonctionne, où est le problème ?

  10. #10
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 528
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 528
    Points : 5 197
    Points
    5 197
    Par défaut Problème résolu
    Citation Envoyé par Aurelien.Regat-Barrel
    j'ai essayé de compiler les exemples et ca fonctionne
    le problème se situe donc dans mes paramètres de compilation
    si ça fonctionne, où est le problème ?
    Le problème persitait avec mon propre programme, la lib compilée en statique ne posait pas de problème avec les exemples qui sont fournis avec

    donc j'ai regardé les paramètres de compilation et j'ai finalement trouvé la raison du problème bien que cela en pose au moins un autre (plantage violent de type "opération non conforme") mais qui, je pense, est dû au d'accéder à une donnée sans la vérouiller (mon programme utilisant des thread gérés par la lib)

    la dll était compilée avec l'option "génération de code" placée sur "DLL Multitaches", j'ai compilé la lib statique de la même façon
    par contre mon programme était compilé avec l'option "Multitaches" et en modifiant cette option sur "DLL Multitaches" la compilation passe et le programme tourne (en dehors du plantage)

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/11/2008, 12h49
  2. Réponses: 3
    Dernier message: 21/11/2007, 08h32
  3. Linker une librairie dynamique
    Par Mathieu.J dans le forum Linux
    Réponses: 2
    Dernier message: 29/10/2005, 19h18
  4. Compiler et créer une librairie dynamique en C
    Par fidififouille dans le forum Linux
    Réponses: 3
    Dernier message: 30/11/2004, 16h36
  5. création d'une librairie dynamique
    Par bilo2000 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 26/08/2004, 15h17

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