210 votes

erreur irrécupérable LNK1112 : type de machine de module ' x64 ' entre en conflit avec le type de machine cible ' X86 '

Je suis l'aide de CUDA(VC++ visual studio 2008sp1) pour déboguer une FEM programme. Le programme ne peut s'exécuter sur une plate-forme win32, de l'insuffisance de cuda. Je pense que la bibliothèque de fichiers liés sont compilés sur la plate-forme x86, mais quand je compile,il y a le message d'erreur"erreur fatale LNK1112: module type de machine 'x64 conflits avec la cible type de machine 'X86'".J'ai essayé de convertir la plate-forme pour les systèmes x64, il ne peut pas fonctionner , trop. S'il vous plaît dites-moi ----qu'est-ce que le module "type de machine" et qu'est-ce que "la cible type de machine"? Comment puis-je vaincre? Merci

288voto

C Johnson Points 4900

J'ai écrit un blog d'entrée à ce sujet, que j'ai rencontré ce affolant problème, et enfin arracha mon système en ordre de marche.

Ce sont les choses à vérifier, dans cet ordre:

  1. Vérifiez vos options des propriétés dans votre éditeur de liens paramètres: Propriétés > Propriétés de Configuration > Linker - > Avancé - > Machine Cible. Sélectionnez MachineX64 si vous utilisez une version 64 bits, ou MachineX86 si vous faites un 32 bits.

  2. Sélectionnez créer > Gestionnaire de Configuration dans le menu principal de visual studio. Assurez-vous que votre projet a la bonne plate-forme spécifiée. Il est possible pour l'IDE d'être ensemble pour construire x64 mais un projet individuel dans la solution peut être réglé pour cible win32. Donc oui, visual studio et laisse beaucoup de corde pour se pendre, mais c'est la vie.

  3. Vérifiez votre bibliothèque de fichiers qu'ils sont vraiment le type de plate-forme cible. Ceci peut être utilisé en utilisant dumpbin.exe qui est dans votre visual studio de CR\bin. utiliser les en-têtes option de vider toutes vos fonctions. Recherchez l'entrée des machines pour chaque fonction. il devrait inclure x64 si c'est un 64 bits.

  4. Dans visual studio, sélectionnez Outils > Options dans le menu principal. sélectionner les Projets et les Solutions > VC++ Répertoires. Sélectionnez x64 à partir de la Plate-forme de liste déroulante. Assurez-vous que la première entrée est: $(VCInstallDir)\bin\x86_amd64 suivie par $(VCInstallDir)\bin.

Une fois j'ai fait l'étape 4, tout a fonctionné de nouveau pour moi. La chose était que j'étais confronté à ce problème sur tous mes projets où j'ai voulu compiler vers une version 64 bits de la cible.

179voto

sergtk Points 3109

En plus C Johnson liste, je voudrais ajouter le point suivant:

Vérifier:
Propriétés du projet -> Propriétés de Configuration -> Linker -> ligne de Commande.

"Options supplémentaires" ne doit PAS contenir /machine:X86

J'ai cette clé, généré par CMake sortie: CMake généré x86 projet, puis j'ai ajouté de la plate-forme x64 via Configuration Manager dans Visual Studio 2010 - tout a été mis à jour amende à l'exception de l'éditeur de liens de ligne de commande, spécifiée /machine:X86 séparément.

57voto

Zid Points 171

J'ai eu le même problème dans VS2008 quand j'ai essayé d'ajouter une version X64 pour un projet converti à partir VS2003.

J'ai regardé tout trouvé lors de la recherche pour cette erreur sur Google (de la machine Cible, Répertoires de VC++, DUMPBIN....) et tout avait l'air OK.

Enfin, j'ai créé un nouveau projet de test et fit de même des changements et ça semblait fonctionner.

Faire un diff entre la vcproj fichiers a révélé le problème....

Mon projet converti a /MACHINE:i386 définir comme option supplémentaire définie sous l'éditeur de liens->Ligne de Commande. Ainsi, il y a deux /MACHINE de jeu d'options (les deux x64 et i386) et les autres un qui a eu la préférence.

La suppression de ce et en le configurant correctement sous l'éditeur de liens->Avancé->Cible de la Machine, le problème disparaissait.

14voto

Patrick Points 12750

Vous avez probablement un. OBJ ou. LIB fichier ciblé pour x64 (c’est le type de machine de module) alors que vous établissez le lien pour x86 (c’est le type de machine cible).

Utilisez DUMPBIN /HEADERS sur votre. Les fichiers OBJ et recherchez l’entrée de la machine dans le bloc de valeurs d’en-tête de fichier.

13voto

habesha Points 45

Car le problème est dû à la différence de la compilation et de la machine cible spécifications (x86 & x64) Suivez les étapes ci-dessous:

  1. Ouvrez le projet C++ que vous souhaitez configurer.
  2. Choisissez la Configuration du Gestionnaire de bouton pour ouvrir le Gestionnaire de Configuration de la boîte de dialogue.
  3. Dans l'Actif de la Solution de Plate-forme de liste déroulante, sélectionnez l'option pour ouvrir la Nouvelle Plate-forme de Solution boîte de dialogue.
  4. Dans le Tapez ou sélectionnez la nouvelle plate-forme de liste déroulante, sélectionnez une plate-forme 64 bits.

Il a résolu mon problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X