it-swarm.com.de

verbindungsproblem: schwerwiegender Fehler LNK1112: Modulmaschinentyp 'x64' steht in Konflikt mit Zielmaschinentyp 'X86'

Ich versuche, eine Beispiel-App aus der wxFreeChart-Bibliothek auszuführen. Nach dem Kompilieren beim Linken gibt es einen Fehler:

wxcode_msw28d_freechart.lib(wxfreechart_lib_xydataset.obj) : fatal error LNK1112: module machine type 'x64' conflicts with target machine type 'X86'

Ich habe versucht, die Linker-Option\advanced\target machine auf MachineX64 umzuschalten, aber es funktioniert nicht.

Ich verwende Visual Studio 2008, einen Vorschlag?

danke für die Hilfe

24
gruber

Der Fehler ist explizit, Sie versuchen Bibliotheken zu verknüpfen, die mit unterschiedlichen CPU-Zielen kompiliert wurden. Ein ausführbares Image kann nur reinen x86-Code (32-Bit) oder reinen x64-Code (64-Bit) enthalten. Mischen ist nicht möglich.

Sie ändern die Ziel-CPU, indem Sie eine neue Konfiguration für das Projekt erstellen. Es reicht nicht aus, die Linker-Einstellung zu ändern. Build + Configuration Manager, Aktive Lösungsplattform oben rechts, wählen Sie Neu und dann x64. Dadurch wird eine neue Konfiguration mit mehreren geänderten Projekteinstellungen erstellt, vor allem der Compiler, der verwendet wird.

Beachten Sie, dass die 64-Bit-Compiler vor VS2010 nicht standardmäßig installiert sind. Wenn x64 in der Plattformkombination nicht angezeigt wird, müssen Sie setup.exe erneut ausführen und die Option zum Installieren der 64-Bit-Compiler aktivieren. Führen Sie dann jedes installierte Service Pack-Installationsprogramm erneut aus.

Ein möglicher Ansatz mit weniger Problemen ist die Verwendung der 32-Bit-Version der Bibliothek.

33
Hans Passant

Ich stieß auch darauf und fand eine Lösung.

Zuerst, wie ich in dieses Problem geraten bin. Ich habe ein Projekt, das in x86 aufbaut. Dann habe ich mit dem Konfigurationsmanager x64 hinzugefügt, und dieses Problem ist aufgetreten.

Als ich BuildLog.htm genau betrachtete, sah ich beide als Linker-Optionen:

/MACHINE:X64  
/machine:X86 

Ich konnte im Dialogfeld "Property Pages" keine Stelle finden, an der ich das ändern konnte. Daher öffne ich die .vcproj-Datei, suchte nach der entsprechenden Zeile und änderte sie in:

AdditionalOptions=" /STACK:10000000 /machine:x64 /debug"

und Problem gelöst.

17
l00g33k

In meinem Fall scheint es, weil ich "Einstellungen" von einer 32-Bit-Konfiguration in eine neue Konfiguration (64 Bit) kopiert hatte und die Bibliotheken nicht aktualisiert wurden. Ungerade. 

1> MSVCRTD.lib (ti_inst.obj): schwerwiegender Fehler LNK1112: Modulmaschinentyp "X86" steht in Konflikt mit Zielmaschinentyp "x64"

dies bedeutet, dass "Ihre Eigenschaften -> VC++ - Verzeichnisse -> Bibliotheksverzeichnisse" auf ein Verzeichnis zeigen, in das 32-Bit-Bibliotheken eingebaut sind. Irgendwie reparieren

In meinem Fall http://social.msdn.Microsoft.com/Forums/ar/vcgeneral/thread/c747cd6f-32be-4159-b9d3-d2e33d2bab55

ref: http://betterlogic.com/roger/2012/02/visual-studio-2010-express-64-bit-woe

5
rogerdpack

Gehen Sie zu Projekteigenschaften-> Konfigurationseigenschaften -> Bibliothekar Setzen Sie Target Machine auf MachineX64 (/ MACHINE: X64)

5
Joseph

Da das Problem auf die unterschiedlichen Kompilierungs- und Zielcomputer-Spezifikationen (x86 & x64) zurückzuführen ist, gehen Sie wie folgt vor:

  1. Öffnen Sie das C++ - Projekt, das Sie konfigurieren möchten.
  2. Wählen Sie die Schaltfläche Configuration Manager, um das Dialogfeld Configuration Manager zu öffnen.
  3. Wählen Sie in der Dropdown-Liste Active Solution Platform die Option aus, um das Dialogfeld New Solution Platform zu öffnen.
  4. Wählen Sie in der Dropdown-Liste Typ oder wählen Sie die neue Plattform eine 64-Bit-Plattform aus.

Das hat mein Problem gelöst.

2
hab

Ändern Sie alle Vorkommen von.\Release in.\X64\Release in den x64-Eigenschaften. Zumindest funktionierte das für mich ...

1
Thomas

Danke für die Antworten, Jungs. Mein Problem war, dass ich eine x64-Lösung in Visual Studio nur in Configuration Manager auf 32 Bit geändert habe. Am Ende habe ich nur eine neue Lösung als 32-Bit erstellt und dann meinen C++ - Code kopiert, und dieser Fehler war verschwunden. Ich denke, dass die Vorschläge von l00g33k und RogerAttrill die Lösung gewesen sein könnten, aber meine haben auch funktioniert.

0
JoeC

Vor kurzem bin ich auch auf dieses Problem gestoßen. Das liegt daran, dass ich qt (x64) In vs win32 Verwendet habe. Wenn Sie die qt-Anwendung x64 Verwenden möchten, können Sie wie oben beschrieben vs x64 Auswählen. Wenn Sie win32 Verwenden möchten und dies möglicherweise noch nicht getan haben, müssen Sie qt (32bit) Herunterladen und dann Ihre Umgebung korrekt einstellen, z. B. das Verzeichnis lib usw (Hinweis: Möglicherweise sind Sie in x64(other version) alt eingestellt. Wenn Sie Ihre win32- oder x64-Datei in eine andere konvertieren, enthält Additional Dependencies das alte Verzeichnis!)

0
Crawl.W

aufbauend auf diesen Antworten - Ich musste auch eine X86-Referenz unter Bibliothekar -> Befehlszeile -> Zusätzliche Optionen ändern (für die x64-Plattform).

0
Kevin Afanasiff

Ich weiß, dass dies ein bisschen alt ist, aber ich dachte, ich würde einen weiteren Tipp geben ... In meiner Situation habe ich diese Anwendung geerbt, die ich beibehalten musste ... Das VS2008-Projekt kam mit der gleichen Zeichenfolge in C/C++ - > OutputFIles -> "ObjectFIleName" und "Program Database File Name" (für beide Plattformen Win32 und x64) . Wenn ich eine Win32-Plattform baute, baute sie gut, aber als ich versuchte, x64 zu erstellen, kam der Fehler:

\ Debug64\Objects\common.obj: schwerwiegender Fehler LNK1112: Modulmaschinentyp 'X86' steht in Konflikt mit dem Zielmaschinentyp 'x64'

Offensichtlich lagerten beide Patforms common.obj am selben Speicherort. Als ich also versuchte, x64 zu erstellen, übernahm der Linker die vorhandene Objektdatei (x86).

Um das Problem zu beheben, habe ich nur die vorhandene Zeichenfolge durch das Makro "$ (IntDir) \" für x64 (ohne Anführungszeichen) ersetzt und sichergestellt, dass das Makro wie in den restlichen Projekten in den richtigen Pfad aufgelöst wird. Das hat mein Problem gelöst.

0
falconK

Dieses Problem hat nichts mit dem Linker zu tun, daher hat das Ändern der Einstellung keinen Einfluss auf das Ergebnis. Sie erhalten dies, weil ich davon ausgehe, dass Sie versuchen, x86 als Ziel festzulegen, aber aus irgendeinem Grund wird wxcode_msw28d_freechart.lib als x64-Datei erstellt.

Schauen Sie sich wxcode_msw28d_freechart.lib und den Quellcode an, aus dem er stammt. Ihr Problem passiert dort. Prüfen Sie, ob es spezielle Erstellungsschritte gibt, die die falschen Tools verwenden (x64 statt x86).

0
user7484190

Ein Update zu den Antworten von i00g und Thomas, diesmal für VS2012 (einige Namen haben sich geändert). Nachdem Sie die x86-Einstellungen mit dem Konfigurationsmanager in ein x64-Ziel kopiert haben, ist das Problem aus demselben Grund wie zuvor der Fall (lib-Ziele sind in der x64-Konfiguration nicht korrekt). Öffnen Sie Ihr .vcxproj (Texteditor) und ersetzen Sie MachineX86 gegebenenfalls durch MachineX64. (Ich habe immer noch nicht gefunden, wo sich dies auf den Eigenschaftenblättern befindet ...) Dies scheint nur bei statischen Bibliotheken erforderlich zu sein.

0
Josh

bevor Sie sich für den Schritt " kompilieren -DIPLIB = NONE Dateiname.cxx "

* C:\apps\MVS9\VC\vcvarsall.bat x86_AMD64 *

jetzt sollte der nächste Schritt sein

kompiliere -64bit -DIPLIB = keine dateiname.cxx

das löste das Problem für mich

0
pratap