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 :

Serveur 2003 64 bits


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut Serveur 2003 64 bits
    Bonjour à tous,
    voici ma problématique :
    1) J'ai une DLL C++ compilée en 32 bits
    2) Je suis sur un serveur windows 2003 en 64 bits

    Ma DLL est utilisée par un programme C# aussi en 32 bits.

    Mon programme marche bien sur un windows 2003 32 bits mais pas sur le 64 bits
    Pourtant l'émulateur Wow64 devrait le faire fonctionner. Pour info j'ai d'autres programmes C# qui tourne en 32 bits mais ils utilisent des DLL C# 32 bits et pas des DLL C++

    J'ai donc décidé de tester la compilation d'un programme C++ simple (Affichage HelloWorld dans la console) j'ai compilé ce programme extrèmement simple en 32 bits.
    Il fonctionne sur une machine 32 bits : il affiche HelloWolrd dans la console
    mais sur mon serveur 64 bits il ne marche pas.

    Lorsque j'exécute mon programme il m'affiche :
    "Cette application n'a pas pu démarrrer car la configuration de l'application est incorrecte. Ré-installler l'application pourrait résoudre le problème"

    Je ne trouve sur les forum que des infos pour compiler en C++ un programme en 64 bits pour la plate-forme 64 bits. Rien n'est précisé dans le cas d'un programme 32 exécuté sur une machine 64 bits.


    Le plus surprenant c'est que le même programme réalisé en C# (Hello World) compilé en 32 bits fonctionne bien sur ma machine 64.

    Je dois rater quelque-chose soit dans la distribution de mon progamme soit dans la compilation mais je ne sais pas ...
    Je suis sur ce problème depuis 1 semaine et je commence à devenir cinglé !!!

    Si quelqu'un a une idée ou a déjà rencontré le problème.
    Merci
    CobNemos

  2. #2
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    C'est un problème de déploiement. Tu dois distribuer en même temps que ta DLL/ton exe les bibliothèques requises (genre msvcr80.dll si la DLL/l'application a été créée avec Visual Studio 2005, etc.). Quel est donc le compilateur que tu utilises ? Si tu ne veux pas te casser la tête avec cette histoire de déploiement, tu n'as qu'à te lier statiquement avec les bibliothèques que tu utilises (en contrepartie, tes fichiers seront plus volumineux).

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut
    Merci milles fois ... Tu viens de sauver ma santé mentale
    Je ne suis plus seul
    J'utilise Visual Studio 2008

    Comment me lier statiquement avec la bibliothèque que j'utilise ?

    CobNemos

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    Il faut savoir qu'une application compilée nativement en 32 bits ne pourra fonctionner qu'avec les versions... 32 bits des dll's qu'elle utilise.

    Tu me dira que c'est normale, hein

    Mais c'est aussi vrai pour les applications compilées nativement en version 64 bits : elles ne pourront fonctionner qu'avec une version... 64 bits des dlls qu'elles utilisent.

    Si tu as une application 32 bits et que les seules versions de dll requises dont tu dispose sont compilées en 64 bits, ou vice versa, l'application ne pourra pas s'exécuter.

    De plus, si la dll porte le même nom quelle que soit l'architecture pour laquelle elle a été compilée, il est bien évident que les deux versions ne peuvent prendre place dans le même dossier.

    Microsoft a résolu ce problème sur ses OS 64 bits en plaçant les dlls 64 bits dans le dossier windows/system32 (je sais, cela fait bizarre de voir un "32" alors que l'on parle de dll...64 bits, mais c'est pour que le dossier soit le même que celui qui était utilisé à l'époque ou le 32 bits régnait en maitre sur les PC) et les dll 32 bits dans le dossier windows sysWOW64.

    Si tu n'es pas en mesure de recompiler les dll, il s'agira de recompiler tout ce qui "vient de toi" (dont ta propre application) pour la même architecture que celle pour laquelle les dll ont été compilées.

    Si tu as la possibilité de tout recompiler, l'idéal est, très certaineemnt, d'envisager de tout recompiler pour une architecture (32 ou 64 bits) bien précise

    Si, enfin, ton application est destinée à être déployée sur des systèmes 32 et 64 bits, il peut sembler opportun de s'arranger pour avoir... une version de chaque
    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

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par cobnemos Voir le message
    Merci milles fois ... Tu viens de sauver ma santé mentale
    Je ne suis plus seul
    J'utilise Visual Studio 2008

    Comment me lier statiquement avec la bibliothèque que j'utilise ?

    CobNemos
    Après le formatage de mon disque je n'ai pas encore pu installer Visual mais c'est dans quelque chose comme : Options de ton projet > C/C++ > Génération de code > CRT et là tu choisis statique.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut
    J'ai essayé plusieurs choses ce week-end.
    dont ceci :
    Options de ton projet > C/C++ > Génération de code > CRT
    je compile avec /MTd au lieu de MDd

    Donc je suis en librairie statique
    Mon .exe passe de 39Ko à 533Ko
    Par contre lorsque je l'exécute sur le serveur 2003 64 bits j'ai toujours la même erreur.

    il n'arrive pas à émuler pour programme 32bits sur cette plateforme.
    Sur mon PC 32bits par contre il fonctionne ainsi que sur le serveur 2003 32bits

    Que faire ?
    Voici le programme (simple) :
    #include "stdafx.h"
    #include <iostream>

    int _tmain(int argc, _TCHAR* argv[])
    {
    std::cout << "HelloWorld!";
    return 0;
    }

    Voici ma ligne de compilation :
    /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MTd /Yu"stdafx.h" /Fp"Debug\TestWin32.pch" /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt

    voici ma ligne de link :
    /OUT:"S:\Développements\SubVersion\iFaxNet\ViametrisWin32\Debug\TestWin32.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\TestWin32.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"s:\Développements\SubVersion\iFaxNet\ViametrisWin32\Debug\TestWin32.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORTROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

    Je ne comprend pas !!

  7. #7
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Peut-être parce que c'est une version debug ? Pourtant, étant donné que tu lies déjà statiquement à la CRT, je ne vois pas ce qui pourrait poser problème mais essaie quand même de compiler en release, et avec /MT donc. Assure-toi également que tu ne te lies pas avec msvcr80.dll, en regardant les dépendances de l'exe dans Dependency Walker par exemple. Normalement avec /MT, tu ne devrais plus avoir de dépendances avec msvcr80.dll.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut
    C'était cela j'ai mis /MT au lieu de /MTd et cela fonctionne.
    Maintenant je peux passer à la suite c-a-d compiler ma DLL.
    Je vous tiens au courant.
    Merci pour ton aide.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 7
    Par défaut
    Après analyse du fonctionnement je pense que je viens de comprendre.

    en fait le problème venait du mode débug qui ne fonctionne pas sur Windows 2003 server 64 bits.

    Ce mode debug fonctionne bien sur windows 2003 32 bits.

    Pour le serveur 64 bits voici les configs qui marche :
    /MT
    /MD : en copiant les bonnes DLL MSCV

    Peut-être cela pourra aider d'autres développeurs.

    Voilà merci pour votre aide.

    Cobnemos

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

Discussions similaires

  1. Installation Oracle8i sur Windows serveur 2003 64 bits
    Par germeu dans le forum Installation
    Réponses: 5
    Dernier message: 03/01/2012, 17h21
  2. Réponses: 2
    Dernier message: 13/09/2011, 16h45
  3. Exécution d'un programme 32 bits sur windows serveur 2003 64 bits
    Par manue85 dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 18/09/2008, 18h16
  4. GetWindowsDirectory et windows serveur 2003
    Par beauchastel dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 05/09/2005, 19h27
  5. Réponses: 4
    Dernier message: 25/03/2005, 20h25

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