fatale fout LNK1112: modulemachinetype ‘x64’ conflicteert met doelmachinetype ‘X86’

Ik gebruik CUDA (VC++, Visual studio 2008sp1) om fouten op te sporen in een FEM-programma. Het programma kan alleen draaien op een Win32-platform, vanwege de ontoereikendheid van cuda. Ik denk dat de bibliotheekbestanden die zijn gekoppeld allemaal zijn gecompileerd op het x86-platform, maar wanneer ik het compileer, krijg ik de foutmelding “fatale fout LNK1112: modulemachinetype ‘x64’ conflicteert met doelmachinetype ‘X86′”.

Ik heb geprobeerd het platform naar x64 te converteren, maar het is niet gelukt. Vertel me alstublieft: wat is “module machinetype” en wat is “doelmachinetype”? Hoe kan ik het overwinnen?


Antwoord 1, autoriteit 100%

Ik heb hier een blogover geschreven , toen ik dit gekmakende probleem tegenkwam, en uiteindelijk mijn systeem weer in orde maakte.

Dit zijn de dingen die u moet controleren, in deze volgorde:

  1. Controleer uw eigenschappenopties in uw linkerinstellingen op: Eigenschappen > Configuratie-eigenschappen > Linker > Geavanceerd > Doelmachine. Selecteer MachineX64 als u een 64-bits build target, of MachineX86 als u een 32-bits build maakt.

  2. Selecteer Build > Configuration Manager vanuit het hoofdmenu in visual studio. Zorg ervoor dat uw project het juiste platform heeft. Het is mogelijk dat de IDE wordt ingesteld om x64 te bouwen, maar een afzonderlijk project in de oplossing kan worden ingesteld om win32 te targeten. Dus ja, visuele studio laat veel touw over om jezelf op te hangen, maar dat is het leven.

  3. Controleer uw bibliotheekbestanden of ze echt van het type platform zijn waarop u zich richt. Dit kan worden gebruikt door dumpbin.exe te gebruiken dat zich in de directory van uw visual studio VC\bin bevindt. gebruik de -headers optie om al je functies te dumpen. Zoek naar de machine-invoer voor elke functie. het moet x64 bevatten als het een 64-bits versie is.

  4. Selecteer in Visual Studio Extra > Opties uit het hoofdmenu. selecteer Projecten en oplossingen > VC++-mappen. Selecteer x64 in de vervolgkeuzelijst Platform. Zorg ervoor dat het eerste item is: $(VCInstallDir)\bin\x86_amd64gevolgd door $(VCInstallDir)\bin.

Toen ik stap 4 deed, werkte alles weer voor mij. Het punt was dat ik dit probleem tegenkwam bij al mijn projecten waar ik wilde compileren naar een 64-bits doel.


Antwoord 2, autoriteit 59%

Naast de C Johnsonlijst zou ik het volgende punt willen toevoegen:

Check in Visual Studio:
Projecteigenschappen -> Configuratie-eigenschappen -> Linker -> Opdrachtregel.

“Aanvullende opties” mogen GEEN /machine:X86

bevatten

Ik heb zo’n sleutel, gegenereerd door CMake-uitvoer: CMakegegenereerd x86-project, daarna heb ik x64-platform toegevoegd via Configuration Managerin Visual Studio 2010 – alles is goed gemaakt voor het nieuwe platform, behalve dat de linker-opdrachtregel /machine:X86afzonderlijk specificeerde.


Antwoord 3, autoriteit 20%

Ik ondervond hetzelfde probleem in VS2008 toen ik probeerde een X64-build toe te voegen aan een project dat was geconverteerd vanuit VS2003.

Ik heb alles bekeken wat ik vond bij het zoeken naar deze fout op Google (doelmachine, VC++Directories, DUMPBIN….) en alles zag er goed uit.

Eindelijk heb ik een nieuw testproject gemaakt en dezelfde wijzigingen aangebracht en het leek te werken.

Een diff doen tussen de vcproj-bestanden onthulde het probleem….

Mijn geconverteerde project had /MACHINE:i386 ingesteld als extra optie ingesteld onder Linker->Command Line. Er waren dus twee /MACHINE-opties ingesteld (zowel x64 als i386) en de extra had de voorkeur.

Door dit te verwijderen en correct in te stellen onder Linker->Advanced->Target Machine is het probleem verdwenen.


Antwoord 4, autoriteit 9%

Alle projectinstellingen leken perfect, maar ik kreeg nog steeds de foutmelding. In het .vcxproj-bestand kijken en zoeken naar “x86” bracht het probleem aan het licht:

<Lib>
  <AdditionalOptions> /machine:X86 %(AdditionalOptions)</AdditionalOptions>
</Lib>

Een snelle zoek-/vervanging voor alle gevallen (tien individuele bestandsinstellingen) loste het probleem op.


Antwoord 5, autoriteit 5%

Je hebt waarschijnlijk één .OBJ- of .LIB-bestand dat is bedoeld voor x64 (dat is het type modulemachine) terwijl je linkt voor x86 (dat is het doelmachinetype).

Gebruik DUMPBIN /HEADERS op uw .OBJ-bestanden en controleer op de machine-invoer in het FILE HEADER VALUES-blok.


Antwoord 6, autoriteit 5%

Omdat het probleem te wijten is aan het verschil in compilatie- en doelmachinespecificaties (x86 & x64)
Volg de onderstaande stappen:

  1. Open het C++-project dat u wilt configureren.
  2. Kies de knop Configuration Manager om het dialoogvenster Configuration Manager te openen.
  3. Selecteer in de vervolgkeuzelijst Actief oplossingsplatform de optie om het dialoogvenster Nieuw oplossingsplatform te openen.
  4. Selecteer in de vervolgkeuzelijst Type of selecteer het nieuwe platform een ​​64-bits platform.

Het heeft mijn probleem opgelost.


Antwoord 7, autoriteit 3%

In Visual Studio 2012 +/- bevat de eigenschappenpagina voor “Configuratie-eigenschappen’.Linker.”Opdrachtregel” een vak met het label “Aanvullende opties”. Als u x64 bouwt, zorg er dan voor dat dat vak geen /MACHINE:I386. Mijn projecten deden dat wel en het veroorzaakte de betreffende fout.


Antwoord 8

Ik kwam dit probleem tegen bij het bouwen van QT. De instructies die ik ergens las, suggereerden dat ik nmake configureerde met behulp van de VS-opdrachtprompt.

Ik koos de x64-opdrachtprompt en voerde de configuratie uit zonder veel gedoe. Toen ik nmake probeerde, gaf het deze fout.

Ik denk dat sommige componenten vooraf zijn gebouwd voor 32-bits. De fout meldde zelfs welke modules voor x86 zijn gebouwd.

Ik heb de 32-bits standaard VS-opdrachtprompt gebruikt en het werkte.


Antwoord 9

"project property - CUDA Runtime API - GPU - NVCC Compilation Type"

Stel de 64-bits compileeroptie in -m64 -cubin

De hint staat in het compileerlogboek.
Zoals dit:

nvcc.exe ~~~~~~ -machine 32 -ccbin ~~~~~

Die "-machine 32"is een probleem.

Stel eerst de 64-bits compileeroptie in,
volgende instelling hybride compileren optie.
Dan kun je het succes zien.


Antwoord 10

In Visual Studio 2013

1) Controleer de pagina’s met projecteigenschappen / configuratie-eigenschappen / link / alle opties en corrigeer alle verkeerd geconfigureerde machines en mappen.

2) Controleer de pagina’s met projecteigenschappen / configuratie-eigenschappen / link / invoer en corrigeer alle verkeerd geconfigureerde mappen.

Zie voorbeeld van 1)


Antwoord 11

Als uw oplossing lib-projecten heeft, controleer dan de eigenschap Target Machine in Property->Librarian->General


Antwoord 12

vcxproj-bestand kan ‘MACHINE:i386’ bevatten
Bewerk het vcxproj-bestand met de editor. verwijder het!


Antwoord 13

Controleer naast de lijst van Jhonson ook de mappen van de bibliotheek

Selecteer in Visual Studio Extra > Opties uit het hoofdmenu. selecteer Projecten en oplossingen > VC++-mappen. Selecteer x64 in de vervolgkeuzelijst Platform.

$(VCInstallDir)lib\AMD64;
$(VCInstallDir)atlmfc\lib\amd64;
$(WindowsSdkDir)lib\x64;

Antwoord 14

Dit overkwam me vandaag omdat ik een bibliotheekdirectory had toegevoegd terwijl ik nog in x86-modus was, en per ongeluk de overgenomen directory’s had verwijderd, waardoor ze in plaats daarvan hardcoded waren.
Na het overschakelen naar x64, lezen mijn VC++-directories nog steeds:

“…;$(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);”

in plaats van de _x64.


Antwoord 15

Ik gebruikte CMake & vervolgens een win32-configuratie toegevoegd. De eigenschappenpagina toonde x86, maar bij het openen van het vcxproj-bestand in een teksteditor was het x64! Handmatig overschakelen naar x86 loste dit op.


Antwoord 16

Probeer eerst het volgende:
1. ga naar configuratiebeheer en maak een nieuwe x64 aan als deze er nog niet is.
2. selecteer de x64-oplossing.
3. ga naar projecteigenschappen en dan Linker->Advanced select x64 machine.
4. Herbouw nu de oplossing.

Als u nog steeds dezelfde foutmelding krijgt. probeer een schone oplossing en herbouw vervolgens opnieuw en open de visuele studio. U krijgt een lijst met recent geopende projecten, klik met de rechtermuisknop op het project en verwijder het daar. Ga nu naar de oplossing en open de oplossing opnieuw.


Antwoord 17

Het is een erg frustrerend en vervelend probleem, maar als je het eenmaal begrijpt, is het vrij eenvoudig: je hebt een element in je bouw dat het ene architectuurtype (in jouw geval x64) bouwt, ondanks het feit dat het doelwit is geweest voor een ander type (zeg x86).

Je kunt de oorzaak van je probleem ontleden door te kijken welk obj-bestand de crash veroorzaakt en daar naar het probleem te zoeken. Elke obj heeft een analoge broncode: ofwel in cpp, c, asm enz. Er kunnen speciale build-evenementen omheen zijn die de verkeerde tool gebruiken. Controleer dat in de eigendomsbladen.

Ik zou daar eerst kijken voordat ik de C Johnson-lijst met dingen om te doen doorneem.


Antwoord 18


Ik heb dit probleem opgelost door Win32 te wijzigen in *64 in Visual Studio 2013.


Antwoord 19

Mijn doel is een x64 Windows 10 tekstmodus DOSBox-toepassing in C-taal.
“Visual Studio 2019 Community” gebruiken om te compileren via de DOS-prompt “nmake -f makefile”.
De fout is vergelijkbaar, maar aan de andere kant:

fatal error LNK1112: module machine type 'x32' conflicts with target machine type 'X64'

Het is oké om te compileren met VC++ 2010 op een andere computer. Maar mislukt op deze computer door “Visual Studio 2019 Community”. Dus mijn instellingen zijn correct en alle bovenstaande antwoorden werken niet.

Ik wil je laten weten dat de oplossing een make.bat is zoals deze:

call "c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" 
nmake -f makefile

Je zult zien dat er nog veel meer vcvarsxxxx.bat zijn, alleen dit ene woord.


Antwoord 20

In mijn geval, omgevingsvariabele PROCESSOR_ARCHITECTUREinstellen op AMD64
het probleem verholpen.

https://social.msdn .microsoft.com/Forums/en-US/f9303904-81ce-405d-85b3-b66d97e49971


Antwoord 21

module machinetype is de machine waarop u compileert en het doelmachinetype is de architectuur x86 of x64 waarvoor u uw binaire bestanden bouwt.


Antwoord 22

Dit probleem kan ook optreden als uw project is ingesteld om dezelfde tussenliggende mappen te hebben in Projecteigenschappen -> Configuratie-eigenschappen -> Algemeen


Antwoord 23

dit gebeurt mij wanneer ik mijn VS2008-oplossing converteer naar VS2010 & verander de win32-configuratie in X64, in mijn oude oplossing heb ik mfcs90d.lib (Configuration->Linker->Input->Extra afhankelijkheden), aangezien ik VS010 gebruik, heb ik net gecontroleerd in de VS2010-map waar het mfcs100d.lib is, dus ik veranderde mfcs90d.lib in mfcs100d.lib in (Configuration->Linker->Input->Extra afhankelijkheden) het werkte prima.


Antwoord 24

Voor degenen die met QT Creator werken, is het probleem hetzelfde (zoals beschreven door @c-johnson).
Zorg ervoor dat de compilerinstellingen voor MSVC in uw kit zijn ingesteld op x86, zoals hieronder weergegeven.

QT Creator Kit-instellingen voor MSVC x86-compiler


Antwoord 25

voor sommigen gebruiken ze de opdrachtprompt (dos prompt)
dit kan nuttig zijn:

call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" --help
Error in script usage. The correct usage is:
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option]
  or
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] store
  or
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] [version number]
  or
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] store [version number]
where [option] is: x86 | amd64 | arm | x86_amd64 | x86_arm | amd64_x86 | amd64_arm
where [version number] is either the full Windows 10 SDK version number or "8.1" to use the windows 8.1 SDK
:
The store parameter sets environment variables to support
  store (rather than desktop) development.
:
For example:
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_arm store
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64 10.0.10240.0
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_arm store 10.0.10240.0
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 8.1
    "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 store 8.1
:
Please make sure either Visual Studio or C++ Build SKU is installed.

Ook als je dit zo doet:

CL “%1%2%3” /EHsc /link user32.lib Gdi32.lib Winmm.lib comctl32.lib *.obj/SUBSYSTEM:CONSOLE /MACHINE:x86

je moet del *.objvoor; om te voorkomen dat de linker wordt verward met zowel 64- als 32-bits objecten die zijn overgebleven van eerdere compilaties?


Antwoord 26

Veel goede suggesties hierboven.

Ook als u x86 Win32 probeert in te bouwen:

Zorg ervoor dat alle bibliotheken waarnaar u linkt in Program Files(x86) in feite x86-bibliotheken zijn, omdat ze niet noodzakelijk…

Bijvoorbeeld een lib-bestand waarnaar ik heb gelinkt in C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\SDK gaf die fout, uiteindelijk vond ik een x86-versie ervan in C:\Program Files (x86 )\Windows Kits\10\Lib\10.0.18362.0\um\x86 en alles werkte prima.


Antwoord 27

Ik heb dit probleem als volgt voor mezelf opgelost.

Allereerst heb ik de andere antwoorden op deze vraag gevolgd, om tot de conclusie te komen dat alle projectinstellingen correct waren.

Toen inspecteerde ik het .vcxproj-bestand met een editor en merkte op dat de < Koppeling > eigenschappen voor de twee (Debug en Release) x64-configuraties specificeerden < TargetMachine >, terwijl de Win32-configuraties beide < Doelmachine > MachineX86 < /TargetMachine >.

Ik had het echter al geverifieerd, kijkend vanuit Visual Studio bij Eigenschappen > Configuratie-eigenschappen > Linker > Geavanceerd > Doelmachine, dat de x64-configuraties MachineX64 (/MACHINE:X64) zeiden.

Dus ik heb het .vcxproj-bestand bewerkt om < Doelmachine > MachineX64 < /TargetMachine > in de twee x64-configuraties. Terugkerend naar het dialoogvenster Visual Studio-projecteigenschappen, merkte ik dat de MachineX64 (/MACHINE:X64)-instelling er was zoals voorheen, behalve dat deze nu vetgedrukt werd weergegeven (blijkbaar betekent dit dat de waarde niet de standaardwaarde is).

Ik heb het opnieuw opgebouwd en het werkte.


Antwoord 28

wat is het besturingssysteem? als het een Windows x64 is, moet je ervoor zorgen dat CUDA x64 is geïnstalleerd en dat VS2008 het project in x64-modus moet compileren…

CUDA installeert alleen x64 OF x86 in Windows

LEAVE A REPLY

Please enter your comment!
Please enter your name here

sixteen + four =

Other episodes