it-swarm.com.de

So machen Sie, dass Visual Studio die native AMD64-Toolchain verwendet

Wie kann ich Visual Studio 2012 dazu bringen, die native AMD64-Toolchain zu verwenden, anstatt den standardmäßigen x86_AMD64-Cross-Compiler?

Ich baue eine große Bibliothek, die dazu führt, dass der Linker bei der gesamten Programmoptimierung und der Link-Time-Code-Generierung nicht mehr über genügend Speicher verfügt.

Ich habe zwei ältere Beiträge ( hier und hier ) gefunden, die dieselbe Frage stellen, aber noch keine Antworten. Microsoft stellt Dokumentation zum Angeben der Toolchain in der Befehlszeile zur Verfügung, nicht jedoch in der IDE.

27
Ky Waegel

Sie müssen die Umgebungsvariable "_IsNativeEnvironment" vor dem Starten von Visual Studio 2012 IDE auf "true" setzen:

set _IsNativeEnvironment=true
start "C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\devenv.exe" your_solution.sln

Bei Visual Studio 2013 unterscheidet sich der Name der Umgebungsvariablen:

set PreferredToolArchitecture=x64
sbm start "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe" your_solution.sln

Beachten Sie, dass diese Technik nicht funktioniert, wenn die Version von IDE nicht mit der Version der Toolchain übereinstimmt. Das heißt, wenn Sie VS2013 IDE verwenden, das zum Ausführen des VS2012-Compilers konfiguriert ist, haben Sie kein Glück. Eine solche Kombination ist jedoch ungewöhnlich.

Hier sind einige Links für weitere Informationen:

Unterschied zwischen VS12 und VS13

Einbetten von PreferredToolArchitecture in das Projekt in VS13

31

Es gibt eine andere Methode, um die Verwendung des 64-Bit-Linkers pro Projekt für Visual Studio 2013 zu erzwingen. Bearbeiten Sie Ihre .vcxproj-Datei und fügen Sie nach der <Import...Microsoft.Cpp.Defaults-Zeile Folgendes ein:

  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup>
    <PreferredToolArchitecture>x64</PreferredToolArchitecture>
  </PropertyGroup>
31
the_mandrill

Wenn Sie die Umgebung native anstelle von AMD64_x86 verwenden möchten, können Sie die UseNativeEnvironment -Eigenschaft in Ihrer Projektdatei festlegen:

<PropertyGroup>
  <UseNativeEnvironment>true</UseNativeEnvironment>
</PropertyGroup>

(Ich habe es erfolgreich zur PropertyGroup "Globals" hinzugefügt.)

Sie können prüfen, welche Toolchain verwendet wird, indem Sie die Compileroption /Bv hinzufügen. Beispielausgabe ist unten. Beachten Sie, dass das Toolchain-Verzeichnis nach bin\ (in diesem Fall AMD64_x86) angezeigt wird.

2>ClCompile:
2>  Compiler Passes:
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\CL.exe:        Version 18.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\c1.dll:        Version 18.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\c1xx.dll:      Version 18.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\c2.dll:        Version 18.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\link.exe:      Version 12.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64\mspdb120.dll:      Version 12.00.31101.0
2>   C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\AMD64_x86\1033\clui.dll: Version 18.00.31101.0
8
Ross Bencina

Ich weiß, dass dies ein ziemlich alter Beitrag ist, aber er ist immer noch für VS 2017 relevant. Hier haben Sie auch die Umgebungsvariable "PreferredToolArchitecture" und eine "eingebaute" Einstellung in der IDE ist nicht ohne weiteres verfügbar.

Sie können dies jedoch problemlos in ein Projekt nach Projektbasis integrieren, sodass Sie immer auswählen können, welche Werkzeugarchitektur verwendet werden soll. Vielleicht ist das für manche hilfreich. Mach das:

  • Gehen Sie zum Eigenschaften-Manager und erstellen Sie ein neues Eigenschaftsfenster. E. G. genannt "x64 Toolchain.props", damit Sie wissen, was es tut. Mit einem separaten Eigenschaftsblatt können Sie dann die Werkzeugarchitektur entsprechend ändern, indem Sie das Blatt in ein Projekt einfügen oder nicht.
  • Öffnen Sie die Eigenschaften dieses neuen Blattes, navigieren Sie zu "Allgemeine Eigenschaften\Benutzermakros" und klicken Sie auf "Makro hinzufügen".
  • Im Dialog setzen Sie den Namen auf "PreferredToolArchitecture", den Wert auf "x64" und aktivieren Sie das Kontrollkästchen "Dieses Makro als Umgebungsvariable in der Build-Umgebung festlegen".
  • Navigieren Sie optional zu "Common Properties\C/C++\Command Line" und fügen Sie unter "Additional Options" "/ Bv" hinzu. Dies bewirkt, dass der Compiler die von ihm verwendeten Tools einschließlich Pfad und Versionsnummer ausgibt. Dies kann hilfreich sein, um zu überprüfen, ob tatsächlich die gewünschte Architektur verwendet wird. Es werden Einträge wie folgt in das Protokollausgabefenster eingefügt:

    Compiler-Pässe:
    C:\Programme (x86)\Microsoft Visual Studio\2017\Unternehmen\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\CL.exe: Version 19.15.26730.0
    C:\Programme (x86)\Microsoft Visual Studio\2017\Unternehmen\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\c1.dll: Version 19.15.26730.0
    C:\Programme (x86)\Microsoft Visual Studio\2017\Unternehmen\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\c1xx.dll: Version 19.15.26730.0
    C:\Programme (x86)\Microsoft Visual Studio\2017\Unternehmen\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\c2.dll: Version 19.15.26730.0
    C:\Programme (x86)\Microsoft Visual Studio\2017\Unternehmen\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\link.exe: Version 14.15.26730.0
    C:\Programme (x86)\Microsoft Visual Studio\2017\Unternehmen\VC\Tools\MSVC\14.15.26726\bin\HostX86\x86\mspdb140.dll: Version 14.15.26730.0
    C:\Programme (x86)\Microsoft Visual Studio\2017\Unternehmen\VC\Tools\MSVC\14.15.26726\bin\HostX86\x64\1033\clui.dll: Version 19.15.26730.0

  • Nun fügen Sie für alle Projekte, die mit der x64-Toolarchitektur erstellt werden sollten, das neue Eigenschaftenblatt in das Projekt im Eigenschaftsmanager ein. Und für diejenigen, die es einfach nicht enthalten sollten. Das ist es.

HTH

1
Don Pedro

Ich habe ein ähnliches Problem bei der Verwendung von Visual Studio 2010 unter XP 64 SP2. Wenn ich das ausführbare VC++ - Verzeichnis auf den AMD64-Ordner (den nativen x64-Ordner) als erstes im Suchpfad gesetzt habe, wurde der TRK0002-Fehler angezeigt… Ungültiger Handle-Wert. 

Wenn ich jedoch _IsNativeEnvironment = true in einer Eingabeaufforderung von Visual Studio 2010 setze und die Ide von der Befehlszeile aus wie zuvor beschrieben starte, wird der Fehler behoben. Offenbar empfängt die 32-Bit-GUI IDE Umgebung Informationen von einem 64-Bit-Prozess und erwartet Informationen von einem 32-Bit-Prozess wie x86\cl.exe oder x86_64\cl.exe. 

In einem Szenario, in dem Sie eine IA64-Bit-Programmdatei kompilieren möchten, verwenden Sie den Compiler x86_ia64\cl.exe. Da Sie einen 32-Bit-Cross-Compiler verwenden und die _IsNativeEnvironment -Variable auf true gesetzt ist, muss dies die IDE stören, wenn Sie Nachrichten in ihren Fensterkonsolen veröffentlichen. Setzen Sie _IsNativeEnvironment = false, wenn Sie es zuvor auf true festgelegt haben.

Die IDE sollte feststellen, dass ein nativer Compiler auf einer 64-Bit-Maschine verwendet wurde, und diese Variable sollte automatisch auf den entsprechenden Wert gesetzt werden, wenn der native Compiler aus der IDE ausgewählt wurde. Es wurde noch nie ein einfaches Update angewendet, um dieses Problem zu beheben. Lösung. Machen Sie es aus der Aufforderung heraus oder kaufen Sie das neueste IDE von Microsoft, um das Problem zu beheben.

Die eigentlichen Assistenten bei Microsoft sind also die Entwickler, die hauptsächlich von der Befehlszeile aus arbeiten. Und die anderen Entwickler, die die spitzen Hüte tragen und in der Ecke sitzen, müssen von Apple gemietet worden sein und waren mehr an Aussehen als an Funktion interessiert. 

Der Zweck einer IDE besteht darin, die Codierung zu vereinfachen, nicht komplizierter als die Verwendung eines Texteditors und eines Makefiles über die Befehlszeile.

0
Henry Garcia