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 :

Comment compiler en 64 bits?


Sujet :

C++

  1. #21
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Pour l'erreur principale (les machine types), il serait intéressant d'avoir la ligne de commande complète de la compilation.
    Voici la ligne de commande de compilation
    /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /ZI /TP /errorReport:prompt
    Et de l'édition de lien
    /OUT:"C:\Documents and Settings\Patrick\Mes documents\Visual Studio 2008\Projects\test3\Debug\test3.exe" /INCREMENTAL /NOLOGO /MANIFEST /MANIFESTFILE:"Debug\test3.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Documents and Settings\Patrick\Mes documents\Visual Studio 2008\Projects\test3\Debug\test3.pdb" /SUBSYSTEM:CONSOLE /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT: PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
    J'ai créé un projet Console Win32, sans aucune modification.
    Les erreurs d'éditions de liens sont les mêmes en mode release.
    Alors que quand j'ouvre Visual normalement (sans passer par "VCExpress /useenv"), le projet compile sans problème.

  2. #22
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Et si tu enlèves les /DYNAMICBASE /NXCOMPAT et /MACHINE:X86 ?
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #23
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    Et si tu enlèves les /DYNAMICBASE /NXCOMPAT et /MACHINE:X86 ?
    Les Warnings sont partis (j'ignore complètement à quoi servent ses options)

    Mais l'erreur reste...
    J'ai essayé plusieurs valeurs pour "Properties->Configuration Properties->Linker->Advanced->Target Machine": Not Set, AMD64, IA64.
    Rien n'y fait j'ai à chaque fois les erreurs suvantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1>main.obj : error LNK2001: unresolved external symbol _RTC_Shutdown
    1>main.obj : error LNK2001: unresolved external symbol _RTC_InitBase

  4. #24
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par screetch Voir le message
    http://downloads.sourceforge.net/min...3&big_mirror=0

    c'est fait a partir des snapshots de la 4.4 datée du 12/08 (d'ou quelques bugs, a priori)
    C'est bien le fichier que j'avais téléchargé.
    C'est bien la version 4.4 de GCC.
    Mais hier soir, je n'avais pas remarqué que 'GCC' ainsi que les autres programmes dans le répertoire 'bin' étaient tous préfixés par "x86_64-pc-mingw32". Pas pratique...

    J'ai compilé un petit "hello world". Quand je l'exécute j'obtiens le message un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ./a.exe
    bash: ./a.exe: Permission denied
    Peut-être normal sous un Windows32. J'essayerai demain d'exécuter ce "hello world" sur un Windows64.

  5. #25
    screetch
    Invité(e)
    Par défaut
    Citation Envoyé par Charlemagne Voir le message
    C'est bien la version 4.4 de GCC.
    Mais hier soir, je n'avais pas remarqué que 'GCC' ainsi que les autres programmes dans le répertoire 'bin' étaient tous préfixés par "x86_64-pc-mingw32". Pas pratique...
    ben si pratique pour avoir plusieurs compilateurs installés.

  6. #26
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par screetch Voir le message
    ben si pratique pour avoir plusieurs compilateurs installés.
    Je préfère changer le PATH, pour ne pas avoir à changer le makefile. C'est d'ailleurs ce que j'ai fait hier, je n'avais pas remarqué le préfixe, et quand j'ai interrogé "gcc --version", j'ai eu la version 3.4.4 installée par cygwin.

    Aujourd'hui j'ai quand même changé le PATH, mais j'ai renommé "x86_64-pc-mingw32-g++" en "g++"

  7. #27
    screetch
    Invité(e)
    Par défaut
    c'est pour ca qu'ils ont mis un repertoire x86_64-pc-mingw32/bin avec dedans les executables gcc, g++...

  8. #28
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par screetch Voir le message
    c'est pour ca qu'ils ont mis un repertoire x86_64-pc-mingw32/bin avec dedans les executables gcc, g++...
    J'ai des oeillères ce soir...

  9. #29
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    Citation Envoyé par Charlemagne Voir le message
    J'ai compilé un petit "hello world". Quand je l'exécute j'obtiens le message un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ./a.exe
    bash: ./a.exe: Permission denied
    Peut-être normal sous un Windows32. J'essayerai demain d'exécuter ce "hello world" sur un Windows64.
    Ca marche sous un Windows 64!!! Merci!!
    Question quand-même: Ce petit programme "Hello world" (compilé en mode debug) fait 4.5Mo!! C'est normal???? Y'a un truc pour diminuer la taille?

  10. #30
    screetch
    Invité(e)
    Par défaut
    compile avec -shared-libgcc
    link avec -lstdc++_s
    utilise -s
    et il faudra que tu prennes les libs stdc++.dll et libgcc.dll pour les mettre pas loin de ton exe, ou dans ton path.
    j'espere qu'ils les ont bien mises dans le paquet

  11. #31
    Inactif  
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 743
    Par défaut
    J'ai trouvé l'origine de l'erreur d'édition de lien sous VisualExpress 2008.
    Il fallait bien dans un 1er temps changer X86 en X64, mais survenait alors une 2ème erreur.
    J'ai trouvé 2 possibilité:
    - ajouter manuellement la librairie 'bufferoverflowu.lib'
    - ou bien désactiver 'Buffer security check' dans 'properties->configuration properties->C/C++->Code Generation'

    Il paraît que Microsoft déconseille d'ôter cette option, je préfère quand même l'ôter car j'imagine que ça a un cout d'exécution non négligeable.


    Pour ceux que ça peut intéresser, je récapitule ce qu'il faut faire pour cross-compiler sous WinXP32 en X64 abec Visual Express:
    -Exécuter dans le SDK "Set Windows XP x64 Build Environment (Retail)"
    -dans l'invite de commande trouver le répertoire "Microsoft Visual Studio 9.0\Common7\IDE" et lancer "VCExpress /useenv"
    -créer son projet
    -changer l'option "Linker->Advanced->Target Machine" X86 en X64
    -désactiver le "buffer security check" ou bien lier avec "bufferoverflowu.lib"

    PS: Ca ne marche qu'en mode release. Y'a qqch qui m'échappe en debug. Pas bien grave car je ne vois pas l'intérêt de cross-compiler en mode debug.

Discussions similaires

  1. Comment compiler en 64 bits avec gcc, -m64 ne marche pas.
    Par jeanlouis_lecodeur dans le forum GCC
    Réponses: 1
    Dernier message: 27/02/2008, 17h40
  2. [CR] Comment compiler un etat ?
    Par glachant dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 20/02/2004, 17h19
  3. Comment compiler un projet en ligne de commande ?
    Par mathieutlse dans le forum EDI
    Réponses: 3
    Dernier message: 11/07/2003, 13h32
  4. Réponses: 2
    Dernier message: 05/12/2002, 16h55

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