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 :

Portabilité d'une DLL VC++ 2008


Sujet :

Visual C++

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut Portabilité d'une DLL VC++ 2008
    Bonjour à tous,

    Si je poste ici, c'est que je suis totalement désespéré.
    C'est vraiment frustrant d'avoir développé un code qui fonctionne parfaitement sur sa machine, destiné à être utilisé par d'autres et qui n'est pas portable.

    Je suis totalement désespéré car cela fait 1 semaine que je ne fais que ça matin, midi et soir : essayer de rendre l'exe portable.

    J'ai écumé tout votre forum+FAQ, y ai trouvé de nombreux cas quasi-similaires, mais aucune des supers réponses que j'y ai trouvé n'ont marché chez moi...

    Donc je vais essayer de bien vous décrire tout en détail, pour vous permettre de répondre aisément.


    1. J'ai développé une application en Java.
    2. Cette appli fait appel à une fonction d'une DLL C++ (qui elle même utilise une librairie C, incluse dans la solution).
    3. La DLL C++ est le résultat de la compilation d'une solution Visual C++ qui était en libre distribution sur le net (des types ont développé une lib qui calcule ce dont j'avais besoin et qui est compliqué à faire, donc je ré-utilise).
      J'ai donc installé Visual C++ 2008 (Express, la 9.0) et j'ai compilé la solution (en configuration DEBUG, la configuration RELEASE ne compile pas). J'obtiens ainsi une DLL.
    4. Pour précision, j'ai modifié très légèrement le code C++ pour pouvoir l'appeler depuis mon Java.
    5. J'ai developpé mon appli sous Eclipse Ganymede. La DLL C++ se trouve dans le projet. Et quand je lance mon appli, cela marche parfaitement.
    6. Quand je produis un JAR et que je le met sur un autre PC, ça râle à l'exécution au moment de charger la DLL. "LinkError, etc.." Désolé, je n'ai pas le message d'erreur sous la main (je l'aurai ce soir si vous voulez).
    7. Je précise de suite que le problème ne me semble pas être le fait que la DLL soit dans le JAR. J'ai en effet mis en place plusieurs versions de l'appli. Un première qui extrait la DLL dans le file-système et qui la charge ensuite, une seconde qui n'a pas la DLL dans le JAR mais on livre la DLL avec le JAR.
    8. IMPORTANT : quand je lance le JAR sur un PC (autre que celui sur lequel j'ai développé) qui a installé Visual C++ 2008 (Express, 9.0)... ça marche !
    9. J'espère ne pas faire de conclusion hâtive, mais il me semble donc que le souci soit lié à des dépendances de la DLL produite par VC++ 2008 avec des "trucs" qu'installerait VC++ 2008.
    10. Ayant parcouru les forums, j'ai vu que pour distribuer une appli développée (ici ma DLL) sous VC++ 2008, il fallait déployer sur la machine cible les MFC et CRT et cie... (j'y connais rien) et qu'il y a un package fait pour : le Redistribuable Package x86 machinchose. Je l'ai installé sur les machines cibles, et ça ne marche pas ! :-(
    11. J'ai vu aussi une solution proposée qui consistait à copier les fichiers de (de tête) Program Files/Visual C++ 2008/VC/redistr/x86/......MFCxx/* et Program Files/Visual C++ 2008/VC/redistr/x86/......CRTxx/* et de les déposer à l'endroit où le JAR est exécuté. Seul bin's, quand je vais sous les répertoires indiqués, je n'ai que les CRT. Pas de MFC. J'ai quand même recopié les CRT à l'endroit où se trouve le JAR sur le PC cible... et ça ne marche pas.
    12. J'ai même pensé à recompiler la solution VC++ avec un autre compilo qui lui, je l'espère, ne mettra pas en place ces dépendances, ... avant de lire sur le forum que c'était quasi mission impossible (ou suicidaire) de vouloir recompiler avec un autre compilo (notamment Cygwin) une solution VC++.



    Arff... On ne pourra pas dire que je n'ai pas fait le tour de la question !


    Merci d'avance à vous.




    PS : C'est où pour se pendre ?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Bonjour,
    Les redistribuables ne contiennent que la version Release de MFC et de la CRT. Il est illégal de tenter de redistribuer une version Debug de ces libs (au passage Visual Express n'a pas MFC, donc si ton programme compile dessus, c'est que tu n'en as pas besoin).

    La seule solution est donc de parvenir à compiler ta bibliothèque en Release. Bonne chance.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Bonjour,
    Les redistribuables ne contiennent que la version Release de MFC et de la CRT. Il est illégal de tenter de redistribuer une version Debug de ces libs (au passage Visual Express n'a pas MFC, donc si ton programme compile dessus, c'est que tu n'en as pas besoin).

    La seule solution est donc de parvenir à compiler ta bibliothèque en Release. Bonne chance.
    Merci pour l'info.
    Quel différence y a-t-il entre une compil DEBUG et RELEASE ?
    ... et qui peut expliquer que l'une compile et pas l'autre ?

  4. #4
    Membre éclairé
    Avatar de PetitPapaNoël
    Développeur informatique
    Inscrit en
    Septembre 2006
    Messages
    559
    Détails du profil
    Informations personnelles :
    Âge : 48

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 559
    Points : 749
    Points
    749
    Par défaut
    Citation Envoyé par Ggrognon Voir le message
    Quel différence y a-t-il entre une compil DEBUG et RELEASE ?
    ... et qui peut expliquer que l'une compile et pas l'autre ?
    Bonjour,

    Puisque tu es nouveau sur le forum, je te conseille d'utiliser l'outil de recherche. Le sujet a déjà été abordé de multiples fois et tu trouveras facilement réponses à tes questions.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par PetitPapaNoël Voir le message
    Bonjour,

    Puisque tu es nouveau sur le forum, je te conseille d'utiliser l'outil de recherche. Le sujet a déjà été abordé de multiples fois et tu trouveras facilement réponses à tes questions.
    OK.

Discussions similaires

  1. Réponses: 10
    Dernier message: 05/02/2009, 13h22
  2. Réponses: 1
    Dernier message: 02/10/2008, 10h18
  3. lier une DLL avec visual c++ 2008
    Par Asmod_D dans le forum Visual C++
    Réponses: 2
    Dernier message: 19/07/2008, 14h10
  4. portabilité d'une dll
    Par seiryujay dans le forum MFC
    Réponses: 32
    Dernier message: 24/11/2006, 14h33

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