Ich schrieb einen Blogeintrag darüber, als ich auf dieses verrückte Problem stieß, und riss mein System schließlich wieder in einen funktionsfähigen Zustand.
Dies sind die Dinge, die in dieser Reihenfolge überprüft werden müssen:
Überprüfen Sie Ihre Eigenschaftenoptionen in Ihren Linker-Einstellungen unter: Eigenschaften> Konfigurationseigenschaften> Linker> Erweitert> Zielcomputer. Wählen Sie MachineX64, wenn Sie einen 64-Bit-Build anstreben, oder MachineX86, wenn Sie einen 32-Bit-Build erstellen.
Wählen Sie im Hauptmenü von Visual Studio Build> Configuration Manager. Stellen Sie sicher, dass für Ihr Projekt die richtige Plattform angegeben ist. Es ist möglich, dass die IDE so eingestellt ist, dass x64 erstellt wird, aber ein einzelnes Projekt in der Lösung kann so eingestellt werden, dass es auf win32 abzielt. Also ja, Visual Studio lässt viel Seil, um sich aufzuhängen, aber so ist das Leben.
Überprüfen Sie in Ihren Bibliotheksdateien, ob sie wirklich von der Art der Plattform sind, auf die sie abzielen. Dies kann mithilfe von dumpbin.exe verwendet werden, die sich in Ihrem Visual Studio VC \ bin-Verzeichnis befindet. Verwenden Sie die Option -headers, um alle Ihre Funktionen zu sichern. Suchen Sie für jede Funktion nach dem Maschineneintrag. Es sollte x64 enthalten, wenn es sich um einen 64-Bit-Build handelt.
Wählen Sie in Visual Studio im Hauptmenü Extras> Optionen. Wählen Sie Projekte und Lösungen> VC ++ - Verzeichnisse. Wählen Sie x64 aus der Dropdown-Liste Plattform. Stellen Sie sicher, dass der erste Eintrag $ (VCInstallDir) \ bin \ x86_amd64 gefolgt von $ (VCInstallDir) \ bin lautet .
Sobald ich Schritt 4 gemacht habe, hat alles wieder für mich funktioniert. Die Sache war, dass ich bei all meinen Projekten, bei denen ich auf ein 64-Bit-Ziel kompilieren wollte, auf dieses Problem stieß.
Zusätzlich zur C Johnson- Liste möchte ich folgenden Punkt hinzufügen:
Checken Sie in Visual Studio ein:
Projekteigenschaften -> Konfigurationseigenschaften -> Linker -> Befehlszeile.
"Zusätzliche Optionen" sollten NICHT enthalten
/machine:X86
Ich habe einen solchen Schlüssel, der durch die CMake-Ausgabe generiert wurde: CMake hat ein x86-Projekt generiert, dann habe ich die x64-Plattform über
Configuration Manager
in Visual Studio 2010 hinzugefügt - alles wurde einwandfrei für die neue Plattform erstellt, außer dass die Linker-Befehlszeile/machine:X86
separat angegeben wurde .quelle
Ich hatte das gleiche Problem in VS2008, als ich versuchte, einem von VS2003 konvertierten Projekt einen X64-Build hinzuzufügen.
Ich habe mir alles angesehen, was bei der Suche nach diesem Fehler in Google gefunden wurde (Zielcomputer, VC ++ - Verzeichnisse, DUMPBIN ...), und alles sah in Ordnung aus.
Schließlich habe ich ein neues Testprojekt erstellt und die gleichen Änderungen vorgenommen, und es schien zu funktionieren.
Ein Unterschied zwischen den vcproj-Dateien ergab das Problem ....
In meinem konvertierten Projekt wurde / MACHINE: i386 als zusätzliche Option unter Linker-> Befehlszeile festgelegt. Daher wurden zwei / MACHINE-Optionen festgelegt (sowohl x64 als auch i386), und die zusätzliche Option wurde bevorzugt.
Wenn Sie dies entfernen und unter Linker-> Erweitert-> Zielmaschine richtig einstellen, ist das Problem verschwunden.
quelle
Alle Projekteinstellungen schienen perfekt zu sein, aber ich habe trotzdem den Fehler erhalten. Ein Blick in die
.vcxproj
Datei und die Suche nach "x86" ergab das Problem:Eine schnelle Suche / Ersetzung für alle Vorkommen (zehn einzelne Dateieinstellungen) behebt das Problem.
quelle
Da das Problem auf die unterschiedlichen Kompilierungs- und Zielcomputerspezifikationen (x86 und x64) zurückzuführen ist, führen Sie die folgenden Schritte aus:
Es hat mein Problem gelöst.
quelle
Sie haben wahrscheinlich eine .OBJ- oder .LIB-Datei, die für x64 (das ist der Modulmaschinentyp) bestimmt ist, während Sie für x86 (das ist der Zielmaschinentyp) verknüpfen.
Verwenden Sie DUMPBIN / HEADERS für Ihre .OBJ-Dateien und überprüfen Sie den Maschineneintrag im Block FILE HEADER VALUES.
quelle
In Visual Studio 2012 +/- enthält die Eigenschaftsseite für "Konfigurationseigenschaften". Linker. "Befehlszeile" ein Feld mit der Bezeichnung "Zusätzliche Optionen". Wenn Sie x64 erstellen, stellen Sie sicher, dass das Feld / MACHINE nicht enthält: I386. Meine Projekte haben es getan und es hat den fraglichen Fehler erzeugt.
quelle
Ich bin beim Erstellen von QT auf dieses Problem gestoßen. Die Anweisungen, die ich irgendwo gelesen habe, deuteten darauf hin, dass ich nmake über die VS-Eingabeaufforderung konfiguriere.
Ich habe die x64-Eingabeaufforderung ausgewählt und die Konfiguration ohne großen Aufwand durchgeführt. Als ich nmake ausprobierte, gab es diesen Fehler.
Ich denke, einige der Komponenten wurden für 32-Bit vorgefertigt. Der Fehler meldete sogar, welche Module für x86 erstellt wurden.
Ich habe die 32-Bit-Standard-VS-Eingabeaufforderung verwendet und es hat funktioniert.
quelle
In Visual Studio 2013
1) Überprüfen Sie die Projekteigenschaftsseiten / Konfigurationseigenschaften / Linker / Alle Optionen und korrigieren Sie alle fehlkonfigurierten Maschinen und Verzeichnisse.
2) Überprüfen Sie die Projekteigenschaftsseiten / Konfigurationseigenschaften / Linker / Eingabe und korrigieren Sie alle fehlkonfigurierten Verzeichnisse.
Siehe Beispiel von 1)
quelle
Die vcxproj-Datei enthält möglicherweise 'MACHINE: i386'. Bearbeiten Sie die vcxproj-Datei mit dem Editor. entfernen Sie es !
quelle
Stellen Sie die 64-Bit-Kompilierungsoption ein
-m64 -cubin
Der Hinweis befindet sich im Kompilierungsprotokoll. So was:
Das
"-machine 32"
ist ein Problem.Stellen Sie zuerst die 64-Bit-Kompilierungsoption und dann die Hybrid-Kompilierungsoption neu ein. Dann können Sie den Erfolg sehen.
quelle
Wenn Ihre Lösung lib-Projekte enthält, überprüfen Sie die Eigenschaft Zielmaschine unter Eigenschaft-> Bibliothekar-> Allgemein
quelle
Überprüfen Sie neben Jhonsons Liste auch die Ordner der Bibliothek
Wählen Sie in Visual Studio im Hauptmenü Extras> Optionen. Wählen Sie Projekte und Lösungen> VC ++ - Verzeichnisse. Wählen Sie x64 aus der Dropdown-Liste Plattform.
quelle
Dies ist mir heute passiert, weil ich im x86-Modus ein Bibliotheksverzeichnis hinzugefügt und die geerbten Verzeichnisse versehentlich entfernt habe, sodass sie stattdessen fest codiert wurden. Nach dem Wechsel zu x64 lesen meine VC ++ - Verzeichnisse immer noch:
"...; $ (VC_LibraryPath_x86); $ (WindowsSDK_LibraryPath_x86);"
anstelle des _x64.
quelle
$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;
Ich habe CMake verwendet und dann eine Win32-Konfiguration hinzugefügt. Die Eigenschaftsseite zeigte x86, aber beim Öffnen der vcxproj-Datei in einem Texteditor war es x64! Der manuelle Wechsel zu x86 löste dieses Problem.
quelle
Es ist ein sehr frustrierendes und ärgerliches Problem, aber sobald Sie es verstanden haben, ist es ganz einfach: Sie haben ein Element in Ihrem Build, das einen Architekturtyp (in Ihrem Fall x64) erstellt, obwohl es ein Ziel für einen anderen Typ war (z. B. x86) ).
Sie können die Ursache Ihres Problems ermitteln, indem Sie sich ansehen, welche obj-Datei den Absturz verursacht, und dort nach dem Problem suchen. Jedes Objekt hat einen analogen Quellcode: entweder in cpp, c, asm usw. Es kann spezielle Build-Ereignisse geben, die das falsche Tool verwenden. Überprüfen Sie dies in den Eigenschaftenblättern.
Ich würde zuerst dort nachsehen, bevor ich die Liste der zu erledigenden Dinge von C Johnson durchgehen würde.
quelle
Ich habe dieses Problem gelöst, indem ich Win32 in Visual Studio 2013 auf * 64 geändert habe.
quelle
Der Modulmaschinentyp ist der Computer, auf dem Sie kompilieren, und der Zielcomputertyp ist die Architektur x86 oder x64, für die Sie Ihre Binärdateien erstellen.
quelle
Dieses Problem kann auch auftreten, wenn Ihr Projekt unter Projekteigenschaften -> Konfigurationseigenschaften -> Allgemein so eingerichtet ist, dass es dieselben Zwischenverzeichnisse hat
quelle
Versuchen Sie zunächst Folgendes: 1. Gehen Sie zum Konfigurationsmanager und erstellen Sie ein neues x64, falls es noch nicht vorhanden ist. 2. Wählen Sie die x64-Lösung aus. 3. Gehen Sie zu den Projekteigenschaften und wählen Sie dann Linker-> Erweitert x64-Computer auswählen. 4. Erstellen Sie nun die Lösung neu.
Wenn immer noch der gleiche Fehler angezeigt wird. Versuchen Sie es mit einer sauberen Lösung und erstellen Sie sie erneut. Öffnen Sie Visual Studio. Sie erhalten eine Liste der zuletzt geöffneten Projekte. Klicken Sie mit der rechten Maustaste auf das Projekt und entfernen Sie es von dort. Gehen Sie nun zur Lösung und öffnen Sie die Lösung erneut.
quelle
Dies passiert mir, wenn ich meine VS2008-Lösung in VS2010 konvertiere und die Win32-Konfiguration in X64 ändere. In meiner alten Lösung habe ich mfcs90d.lib (Konfiguration-> Linker-> Eingabe-> Zusätzliche Abhängigkeiten), da ich VS010 verwende, habe ich gerade überprüft Im VS2010-Ordner, in dem es sich um mfcs100d.lib handelt, habe ich mfcs90d.lib in mfcs100d.lib geändert (Konfiguration-> Linker-> Eingabe-> Zusätzliche Abhängigkeiten).
quelle
Für diejenigen, die mit QT Creator arbeiten, ist das Problem dasselbe (wie von @ c-johnson beschrieben). Stellen Sie sicher, dass die Compilereinstellungen für MSVC in Ihrem Kit wie unten gezeigt auf x86 eingestellt sind.
quelle
Für einige Benutzer der Eingabeaufforderung (dos prompt) kann dies hilfreich sein:
Auch wenn dir das gefällt:
CL "% 1% 2% 3" / EHsc / link user32.lib Gdi32.lib Winmm.lib comctl32.lib * .obj / SUBSYSTEM: CONSOLE / MACHINE: x86
Sie müssen vorher * .obj löschen ; um zu vermeiden, dass Linker mit 64- und 32-Bit-Objekten verwechselt werden, die von früheren Kompilierungen übrig geblieben sind?
quelle
Viele gute Vorschläge oben.
Auch wenn Sie versuchen, x86 Win32 einzubauen:
Stellen Sie sicher, dass alle Bibliotheken, auf die Sie in Programmdateien (x86) verweisen, tatsächlich x86-Bibliotheken sind, da sie nicht unbedingt ...
Zum Beispiel hat eine lib-Datei, mit der ich in C: \ Programme (x86) \ Microsoft Visual Studio \ 2019 \ Professional \ SDK verknüpft war, diesen Fehler ausgelöst. Schließlich habe ich eine x86-Version davon in C: \ Programme (x86) \ Windows gefunden Kits \ 10 \ Lib \ 10.0.18362.0 \ um \ x86 und alles hat gut funktioniert.
quelle
Was ist das Betriebssystem? Wenn es sich um ein Windows x64 handelt, müssen Sie sicherstellen, dass CUDA x64 installiert wurde und dass VS2008 das Projekt im x64-Modus kompilieren soll ...
CUDA installiert nur x64 ODER x86 in Windows
quelle