2017-06-09 4 views
0

J'ai une application composée de nombreux projets dll et exe. Je porte sur une version 64 bits et pratiquement tout fonctionne bien. Cependant, j'ai un projet exe qui ne se construira pas correctement dans la configuration 64 bits. La chose étrange est que cela ne se construira pas à partir de la commande de construction IDE. Si j'ouvre une fenêtre de commande VS 64 bits et que je la compile avec msbuild, elle se construit avec succès. J'ai examiné d'autres questions et réponses similaires qui se réfèrent généralement à une inclusion de windows.h supplémentaire (ou manquante), mais il est difficile de déterminer si c'est la même chose. J'ai essayé différentes combinaisons d'inclus, mais je ne vois pas de problème clair.Aucune erreur d'architecture cible avec la version 64 bits de Visual Studio 2010 IDE

je peux construire le projet dans le VS IDE comme exe 32 bits je ne peux pas générer le projet dans le VS IDE comme exe 64 bits je peux construire le projet dans une fenêtre de commande de 64 bits en tant que un exe 64 bits

J'ai _WIN64 et _AMD64 définis comme définitions de préprocesseur.

Si activer l'option du compilateur de montrer comprend, je vois ceci:

 
1> Note: including file: c:\dev\projects\myapp\myproject.root\myproject\stdafx.h 
1> Note: including file: c:\dev\projects\myapp\myproject.root\myproject\targetver.h 
1> Note: including file: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\SDKDDKVer.h 
1> Note: including file: c:\dev\projects\myapp\myproject.root\myproject\resource.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlbase.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atldef.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlrc.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\errno.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\sal.h 
1> Note: including file:  c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h 
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(27): error C2371: 'size_t' : redefinition; different basic types 
1>   predefined C++ types (compiler internal)(19) : see declaration of 'size_t' 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vadefs.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\malloc.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdlib.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\limits.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdbg.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 
1> Note: including file: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windows.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\excpt.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdarg.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ctype.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings.h 
1> Note: including file:  c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sal_supp.h 
1> Note: including file:  c:\program files (x86)\microsoft sdks\windows\v7.0a\include\specstrings_supp.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings_strict.h 
1> Note: including file:   C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings_undef.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h 
1> Note: including file:   c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sdv_driverspecs.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\kernelspecs.h 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(135): fatal error C1189: #error : "No Target Architecture" 

Toutes les suggestions?

+0

Il n'est pas nécessaire de définir '_WIN64' ou' _AMD64' il vous suffit de définir la plate-forme du projet sur x64 et la machine cible du linker sur la machine64 dans les paramètres du projet. – VTT

+0

Intéressant. J'ai enlevé ces définitions et maintenant tout compile correctement mais je reçois une erreur de lien: "erreur fatale LNK1112: le type de machine de module 'X86' est en conflit avec le type de machine cible 'x64'". J'ai le 'x64' comme plate-forme et les paramètres de l'éditeur de liens sont définis sur le type de machine X64. – Ken

+0

Peut-être que vous avez des paramètres différents pour une unité de traduction ou quelque chose? Pour l'en-tête précompilé .cpp par exemple? – VTT

Répondre

0

Je pense que j'ai la réponse. J'ai comparé mes paramètres de projet à un nouveau projet vide que j'ai créé. L'entrée de répertoires VC++ pour les répertoires exécutables était différente de la mienne.

Les répertoires par défaut ont démarré avec ceci: $ (VCInstallDir) bin \ x86_amd64;

Mon projet existant ne l'avait pas. Je l'ai ajouté à mon projet pour les configurations de débogage et de libération de plate-forme 64 bits, et je peux maintenant créer la version 64 bits. Et je peux encore construire la version 32 bits aussi.

Je suppose que le répertoire est où le compilateur 64 bits et l'éditeur de liens résident. Si c'est vrai, l'erreur "Aucune architecture cible" semble être un message d'erreur étrange à donner pour cette condition.