Clang mit MSVC - minimale Installation (Anleitung)

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von starcow »

Clang und LLVM mit MSVC - minimale Installation unter Windows

Diese Schritt-für-Schritt Anleitung soll den Weg für eine minimale Installation von Clang in Kombination mit dem MSVC weisen.
Stand: 17. Juni 2023

Korrekturen dank Hinweisen von Krishty

Folgende Komponenten müssen installiert werden:
  • Clang Compiler (LLVM)
  • Buildtools für Visual Studio (für Header- und Lib-Dateien der C Standard Library)
  • Windows SDK (für Header- und Lib-Dateien der C Standard Library)
Damit Clang die nötigen Header- und Lib-Dateien finden kann, ist es notwendig, einige Umgebungsvariablen zu setzen:
  • INCLUDE
  • LIB

Clang Compiler
Den Clang Compiler herunterladen und installieren.

https://github.com/llvm/llvm-project/re ... org-15.0.7
Datei: LLVM-15.0.7-win64.exe

Damit Clang später über die Kommandozeile aus jedem Verzeichnis gestartet werden kann, muss der Pfad zu seiner .exe Datei in einer entsprechenden Umgebungsvariable gesetzt sein.
Das setzen dieses Eintrages nimmt einem das Installationsprogramm von Clang ab, sofern man die entsprechende Checkbox nicht explizit abwählt.



MSVC Linker (und Compiler)
Die Buildtools für Visual Studio liefern neben dem Compiler und Linker (die hier nicht zwingend benötigt würden) Header- und Lib-Dateien.

https://visualstudio.microsoft.com/de/d ... uild+tools
Runterscrollen bis zu Tools für Visual Studio

Im Installations-Menü, im Reiter Einzelne Komponenten, unter dem Eintrag Compiler, Buildtools und Laufzeiten folgenden Eintrag auswählen:

Code: Alles auswählen

MSVC v143 - VS 2022 C++ x64/x86-Buildtoos (v14.36-17.6)

Header und Libs
Weitere Header- und Lib-Dateien werden mittels Microsoft SDK installiert.
Das Microsoft SDK als Installer oder als ISO Datei herunterladen (ISO Datei kann auch mittels 7-Zip entpackt werden).

https://developer.microsoft.com/de-de/w ... ndows-sdk/

Installer ausführen und folgende Optionen auswählen:
  • Windwos SDK Signing Tools for Desktop Apps
  • Windows SDK for UWP Managed Apps
  • Windows SDK for UWP C++ Apps
  • Windows SDK for Desktop C++ x86 Apps
  • Windows SDK for Desktop C++ x64 Apps

Es ist nicht möglich, weniger anzuwählen, wenn Header und Libs für die X64 und X86 Desktop-Entwicklung installiert werden sollen.
Falls das SDK bereits installiert wurde fehlt im Installer die entsprechende Option zur Installation.
Lediglich ein erneuter Download ist möglich.
Das SDK muss in diesem Fall über die Systemsteuerung (Programme und Funktionen) "geändert" oder "deinstalliert" werden.

Das SDK wird in folgendes Verzeichnis installiert:

C:\Program Files (x86)\Windows Kits\10\
Falls ein anderes Verzeichnis gewählt wird, gilt es dies im nächsten Schritt zu berücksichtigen.


Umgebungsvariablen setzen
Damit der Clang Compiler alle nötigen Header- und Lib-Dateien finden kann, müssen einige Umgebungsvariablen gesetzt werden.
Die Umgebungsvariablen können manuell mittels Kommandozeile dauerhaft gesetzt werden.
Hierfür muss die Kommandozeile mit Adminrechten gestartet werden.

Das Schema zum dauerhaften Setzen einer Umgebungsvariable lautet wie folgt:

Code: Alles auswählen

setx [Umgebungsvariable] [Wert] /m
setx setzt im Gegensatz zu set die Umgebungsvariable dauerhaft.
Die Option /m setzt die Umgebungsvariable für alle User.
Sollen die bereits bestehenden Werte einer Umgebungsvariablen erhalten bleiben, können diese durch das entsprechende Token
%[Umgebungsvariable]% jeweils am Anfang oder am Ende des neuen Eintrages eingebunden werden (Siehe Beispiel weiter unten bei PATH).


Alternativ:
Systemsteuerung => System => Erweiterte Systemeinstellungen => Reiter: Erweitert => Umgebungsvariablen

Vor dem Setzen der Umgebungsvariablen prüfen, ob die Pfade auf dem Zielsystem tatsächlich in dieser Form existieren (Version des Compilers - hier "14.36.32532", plattformspezifisches wie "x64", Version des SDK's - hier "10.0.22621.0")


INCLUDE
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.36.32532\include;
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt;
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um;
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared;
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt;
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt;

Befehl in der Kommandozeile:

Code: Alles auswählen

setx INCLUDE "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.36.32532\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\winrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\cppwinrt" /m

LIB
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.36.32532\lib\x64;
C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\ucrt\x64;
C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x64;

Befehl in der Kommandozeile:

Code: Alles auswählen

setx LIB "C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\14.36.32532\lib\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\um\x64;" /m

PATH
Falls man das Setzen einer Umgebungsvariable nicht durch das Installationsprogramm von Clan erledigen lassen wollte, kann hierzu auch die Umgebungsvariable PATH entsprechend erweitert werden.

Code: Alles auswählen

setx PATH "%PATH%C:\llvm\bin;" /m
Pfad zu Clang entsprechend der eigenen Struktur anpassen

Die Konsolen-Sitzung muss nach dem Setzen der Umgebungsvariablen neu gestartet werden.
Danach kann der Clang Compiler verwendet werden.

Damit Clang den eigenen Linker, und nicht den MSVC Linker verwendet, muss mit folgender Compiler-Option compiliert werden:

Code: Alles auswählen

-fuse-ld=lld
Zuletzt geändert von starcow am 18.06.2023, 18:24, insgesamt 42-mal geändert.
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Clang mit MSVC - Minimale Installation (Anleitung)

Beitrag von starcow »

Da ich jetzt einige Zeit damit verbracht habe, herauszufinden, wie ich den Clang Compiler im Zusammenspiel mit dem MSVC zum Laufen bringe, ohne dabei nicht wirklich Notwendiges mitzuinstallieren, dachte ich mir, eine Anleitung könnte vielleicht auch dem einen oder anderen eine Hilfe sein.

Für euch Profis wohl kaum etwas, was ihr nicht schon längst gewusst habt.
Aber vielleicht gibt's ja den "stummen" Leser, der daran interessiert ist.

Eure Ergänzungen oder Verbesserungsvorschläge nehme ich natürlich sehr interessiert und dankend entgegen.
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von Krishty »

Oh, super! Ich hatte mir vorletztes Jahr eine portable Clang/MSVC-Toolchain gebaut, und sehe bei mir noch einiges Optimierungspotential. Daher:
starcow hat geschrieben: 31.05.2023, 18:42Da der Clang Compiler (auch?) unter Windows keinen eigenen Linker hat, ist er damit auf einen "externen" Linker angewiesen.
Folglich reicht es nicht aus, lediglich den Clang Compiler (LLVM) herunterzuladen und zu installieren.
Das dürfte veraltet sein – war bis 2018/2019(?) so. Bei mir liegt jedenfalls ein lld-link.exe, 71 MiB, im LLVM-Paket, das ich statt Microsofts Linker aufrufen kann. Es mimt Microsofts Befehlszeile, ist also direkter Ersatz.
Es scheint so, als ob MSVC Compiler und Linker nur noch mittels dem "Visual Studio Installer" installiert werden können.
Im SDK scheinen sie nicht mehr enthalten zu sein.
Das Stichwort heißt Build Tools for Visual Studio; herunterladen kannst du sie etwa hier (runterscrollen zu den Suchergebnissen). Das installiert dir Compiler und Linker ohne restliche Visual-Studio-IDE.
INCLUDE
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include;
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include;
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt;
C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\um;
Hier bin ich etwas zögerlich. Du benutzt die #include-Pfade für Visual Studios Standardbibliothek und Laufzeitbibliotheken, obwohl Clang seine eigenen mitbringt (unter include und lib der Installation). Das klingt erstmal falsch, denn du möchtest ja Clang nutzen, wo möglich. Tatsächlich müsste ich prüfen, wie ich das bei mir gehandhabt habe.

Code: Alles auswählen

setx INCLUDE "%PATH%;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include;…" /m
Verstehe ich richtig, dass das den kompletten PATH zu den Include-Verzeichnissen hinzufügt?! Das wäre doch totaler Overkill! Abgesehen davon benutzen sowohl MSVC als auch Clang Umgebungsvariablen, um die Verzeichnisse mit #includes und Bibliotheken zu finden. Die von Visual C++ sind hier aufgezählt und Clang mimt sie: CL environment variables
Ein set "INCLUDE=C:\Program Files\…\MSVC\14.36.32532\include;…;%INCLUDE%" vor dem Aufruf des Compilers dürfte bei Weitem weniger invasiv für das Gesamtsystem sein, als die System-Umgebung in der Registry zu ändern! Wahrscheinlich entfällt dann auch:
Die Konsolen-Sitzung muss nach dem Setzen der Umgebungsvariablen neu gestartet werden.
Davon ab ist das eine beachtliche Leistung 👍 Die meisten schaffen es gerade so, die Visual-C++-Projekteinstellungen in der IDE zu finden. Ein ganzes Build-System selber aufsetzen ist hardcore.

Ich habe noch Anleitungen für portable Visual C++-Build-Tools; Resource Compiler; Shader Compiler; App Packaging in der Pipeline – und eine komplette Visual-Studio-IDE-Integration, so dass dein Befehlszeilen-Build aus Visual Studio aufgerufen werden kann, mit Auswahl von Debug/Release/x86/x64. Bin nie dazu gekommen, das niederzuschreiben. Hoffentlich finde ich demnächst mal Zeit.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von starcow »

Oh nein! Vielen Dank Krishty!
Da hätte ich wohl lieber gleich euch (dich) fragen sollen :'-/
Die Informationen die ich gefunden hatte, besagten alle, dass Clang (leider) keinen eigenen Linker mitliefert und man für .pdb Debug-Dateien den MSVC-Linker verwenden müsse. Ganz offensichtlich ist das nicht mehr der Fall, was ja sehr erfreulich ist.

Das lld-link.exe tatsächlich auch bei mir vorhanden ist, hatte ich nicht realisiert, da Clang offensichtlich standardmässig nicht den eigenen Linker verwenden will (?).
Kann man clang denn irgendwie dazu überreden, immer "lld-link.exe" zu verwenden, ohne jedesmal

Code: Alles auswählen

-fuse-ld=lld
als Argument mitzugeben?

Davon unabhängig scheinen bei mir einige Dateien nicht mitinstalliert zu werden.
So recht erklären kann ich es mir nicht. So fehlt z. B. stdio.h, libcmt.lib, oldnames.lib (und das dürften jetzt nur die sein, die durch meine einfachen Beispiele getriggert wurden).
Seltsamerweise ist dann aber wiederum der Header stdint.h vorhanden.
Runtergeladen habe ich "LLVM-16.0.0-win64.exe"

Verstehe ich richtig, dass das den kompletten PATH zu den Include-Verzeichnissen hinzufügt?! Das wäre doch totaler Overkill! Abgesehen davon benutzen sowohl MSVC als auch Clang Umgebungsvariablen, um die Verzeichnisse mit #includes und Bibliotheken zu finden. Die von Visual C++ sind hier aufgezählt und Clang mimt sie: CL environment variables
Oh, Mist! Das sollte natürlich nicht die PATH Variable sein, sondern die Variable entsprechend dem Kontext, also INCLUDE und LIB! Danke fürs genaue Hinschauen, ich habs korrigiert.

Super auch der Hinweis mit den Build Tools for Visual Studio. Dass war genau das, was ich gesucht und leider nicht gefunden hatte. 8-[

Edit:
Ich habe die Build Tools jetzt auf zwei System installiert und irgendwie scheint cl.exe einfach nicht dabei zu sein.
Der Compiler und Linker müsste doch der selbe sein, wie bei der Installation der IDE "Visual Studio"?

Davon ab ist das eine beachtliche Leistung 👍 Die meisten schaffen es gerade so, die Visual-C++-Projekteinstellungen in der IDE zu finden. Ein ganzes Build-System selber aufsetzen ist hardcore.
Danke für die lieben Worte. Auch wenns grad der investieren Zeit wegen etwas schmerzt, muss man wohl ehrlicherweise sagen, dass mein Thread durch deine wirklich guten Hinweise wohl obsolet geworden ist. X-)
Jedenfalls habe ich jetzt ausführlich dokumentiert, wie man es nicht machen sollte.
Da ich nun aber weiss, dass es wesentlich einfacher geht, bin ich trotzdem sehr dankbar! Danke Krishty!

Edit:
Ich werde mein ursprüngliches Post noch anpassen, sobald ich Clang "standalone" bei mir zum laufen gekriegt habe.
Zuletzt geändert von starcow am 08.06.2023, 14:10, insgesamt 2-mal geändert.
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von dot »

Rein prinzipiell sollte es glaub ich möglich sein, Clang auf Windows gänzlich ohne MSVC zu betreiben. Clang verwendet nur by default die MSVC Standardlibrary und den MSVC Linker. Wenn du Clang oder zumindest libc++ selber baust, solltest du einfach mit lld und libc++ arbeiten können. Windows SDK wird vermutlich noch benötigt werden. Hab das selber nie ausprobiert und würde das nicht empfehlen (MSVC Standardlibrary ist libc++ ime wesentlich voraus und ich würde es generell vermeiden, mit non-native Tools zu arbeiten), sehe aber keinen Grund wieso das nicht klappen sollte…
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von Lord Delvin »

Gibt es einen Weg unter Windows professionell Software zu enwtickeln ohne für die MSVC Runtime irgendwie zu bezahlen?
Hatte mir das mal angesehen und keinen offensichtlichen gesehen; kann mich aber auch nicht mehr an die genauen Rahmenbedingungen erinnern. Alles in WSL laufen zu lassen zählt nicht :)
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von Krishty »

starcow hat geschrieben: 01.06.2023, 12:35Auch wenns grad der investieren Zeit wegen etwas schmerzt, muss man wohl ehrlicherweise sagen, dass mein Thread durch deine wirklich guten Hinweise wohl obsolet geworden ist. X-)
Jedenfalls habe ich jetzt ausführlich dokumentiert, wie man es nicht machen sollte.
Das war überhaupt nicht umsonst. Es gibt X verschiedene Ansätze, sowas zu realisieren; unsere sind auch ziemlich unterschiedlich.

Ich rufe bspw. den Linker direkt auf, statt den Compiler Driver dafür zu benutzen. Deshalb kann ich dir leider nicht beantworten
Das lld-link.exe tatsächlich auch bei mir vorhanden ist, hatte ich nicht realisiert, da Clang offensichtlich standardmässig nicht den eigenen Linker verwenden will (?).
Kann man clang denn irgendwie dazu überreden, immer "lld-link.exe" zu verwenden, ohne jedesmal "-fuse-ld=lld" als Argument mitzugeben?
denn bei mir ruft die Befehlszeile halt direkt lld-link.exe auf.

Vergiss auch nicht, dass es noch MinGW gibt, das eine quasi-vollständige Sammlung Entwicklungswerkzeuge nach Windows bringt, die entweder auf GCC basieren oder auf Clang (weiß nicht, ob man es bei der Installation aussuchen kann, oder es dafür unterschiedliche Installer gibt). Die sind dann auch tatsächlich nah an Clangs natürlicher Funktion und mimen nicht Visual C++.
So recht erklären kann ich es mir nicht. So fehlt z. B. stdio.h, libcmt.lib, oldnames.lib (und das dürften jetzt nur die sein, die durch meine einfachen Beispiele getriggert wurden).
libcmt.lib ist die Multi-Threaded Visual-C++-Laufzeitbibliothek. oldnames.lib ist eine Kompatiblitätsbibliothek. Beide sollten nur im Microsoft-Modus erforderlich sein. Hast du mal -fno-ms-compatibility -fno-ms-extensions versucht?

Ich benutze hier keine CRT; weder Microsofts noch libc++. Darum hatte ich da leider nicht viele Berührungspunkte.
Lord Delvin hat geschrieben: 01.06.2023, 19:57Gibt es einen Weg unter Windows professionell Software zu enwtickeln ohne für die MSVC Runtime irgendwie zu bezahlen?
Hatte mir das mal angesehen und keinen offensichtlichen gesehen; kann mich aber auch nicht mehr an die genauen Rahmenbedingungen erinnern. Alles in WSL laufen zu lassen zählt nicht :)
Wenn du mit MinGW baust, referenziert das msvcrt.dll aus dem Windows-Verzeichnis anstelle der Visual-C++-CRT. Was überhaupt nicht gewollt ist.

Seit Windows 8 ist die universelle CRT eine Systemkomponente (also nicht die, die MinGW im Beispiel oben nutzt) und wird auch als solche gepflegt (immer verfügbar; regelmäßig aktualisiert). Sie ist auf ein paar Dutzend DLLs verteilt mit freundlichen Namen wie API-MS-WIN-CRT-HEAP-L1-1-0.DLL. Es gibt keinen Grund, diese zu meiden, da sie nun genauso zum System gehören wie Kernel32.dll.

Die Visual-C++-CRT (vcruntime140.dll & Co.) ist ein recht schmaler Wrapper über diese System-CRT (verglichen damit, wie fett sie zu Zeiten von VS2012 war).
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von dot »

Lord Delvin hat geschrieben: 01.06.2023, 19:57 Gibt es einen Weg unter Windows professionell Software zu enwtickeln ohne für die MSVC Runtime irgendwie zu bezahlen?
Hatte mir das mal angesehen und keinen offensichtlichen gesehen; kann mich aber auch nicht mehr an die genauen Rahmenbedingungen erinnern. Alles in WSL laufen zu lassen zählt nicht :)
Visual Studio und MSVC sind effektiv frei verfügbar sofern du nicht ein Unternehmen mit mehr als 250 Workstations bist oder mehr als $ 1 M Umsatz machst [link]. Und wenn du mehr als $ 1 M Umsatz machst dann sollte es für dich kein Ding sein, eine Pro oder Enterprise Lizenz zu kaufen und von der Steuer abzusetzen…
Benutzeravatar
Lord Delvin
Establishment
Beiträge: 574
Registriert: 05.07.2003, 11:17

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von Lord Delvin »

dot hat geschrieben: 01.06.2023, 23:29
Lord Delvin hat geschrieben: 01.06.2023, 19:57 Gibt es einen Weg unter Windows professionell Software zu enwtickeln ohne für die MSVC Runtime irgendwie zu bezahlen?
Hatte mir das mal angesehen und keinen offensichtlichen gesehen; kann mich aber auch nicht mehr an die genauen Rahmenbedingungen erinnern. Alles in WSL laufen zu lassen zählt nicht :)
Visual Studio und MSVC sind effektiv frei verfügbar sofern du nicht ein Unternehmen mit mehr als 250 Workstations bist oder mehr als $ 1 M Umsatz machst [link]. Und wenn du mehr als $ 1 M Umsatz machst dann sollte es für dich kein Ding sein, eine Pro oder Enterprise Lizenz zu kaufen und von der Steuer abzusetzen…
Ich verstehe warum man das denkt, wenn man es noch nicht selbst erlebt hat :)
XML/JSON/EMF in schnell: OGSS
Keine Lust mehr auf C++? Versuche Tyr: Get & Get started
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von Krishty »

dot hat geschrieben: 01.06.2023, 23:29Visual Studio und MSVC sind effektiv frei verfügbar sofern du nicht ein Unternehmen mit mehr als 250 Workstations bist oder mehr als $ 1 M Umsatz machst [link]. Und wenn du mehr als $ 1 M Umsatz machst dann sollte es für dich kein Ding sein, eine Pro oder Enterprise Lizenz zu kaufen und von der Steuer abzusetzen…
Ich könnt’s falsch verstanden haben, aber die Visual Studio Build Tools sind auch frei, solange du damit Open-Source-Abhängigkeiten kompilierst: https://visualstudio.microsoft.com/lice ... uildtools/

Wie gesagt, MinGW gibt’s auch noch. Ich wollte schon lange umsteigen (seit es Clang kann), aber immer kam was dazwischen.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
NytroX
Establishment
Beiträge: 358
Registriert: 03.10.2003, 12:47

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von NytroX »

Als weitere Alternative gibt es auch Zig. Ist quasi Clang in einem besseren Paket/Kompilat (single executable und kommt mit allen Libs, und kann cross-compilen). Bevor man sich mit MinGW und der nicht funktionierenden Clang lib sowie dem msys2-Kram rumschlägt... ist das doch wesentlich angenehmer zu benutzen.
(und kann nebenbei auch Zig compilieren, falls man von C/C++ die Nase voll hat ;-)
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von Krishty »

Wo wir gerade dabei sind: Mein portables Visual C++ kann kein Edit & Continue.

Bei Edit & Continue muss ja aus den Debug-Informationen des geänderten Moduls gelesen werden, mit welcher Befehlszeile es ursprünglich kompiliert wurde, um das Kompilieren zu wiederholen. Damit dort keine Remote Code Execution möglich ist, indem dir jemand Kompilat unterschiebt, bei dem Edit & Continue dann virus.exe aufrufen würde, prüft Visual Studio, ob der Pfad zur VS-Installation passt. Tut er bei meinem portablen VS natürlich nicht mehr:

-------- Edit and Continue build started --------

Project : error (null) : Edit and Continue could not create a safe command line to compile changes. Please ensure that the same version of the compiler used to compile the code originally is installed with the current Visual Studio installation. More information may be available in the Debug pane of the Output window (Debug > Windows > Output).
--------------------- Done ----------------------


Weiß jemand, wo man das abschalten kann?
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
NytroX
Establishment
Beiträge: 358
Registriert: 03.10.2003, 12:47

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von NytroX »

Versuch mal:
Tools > Options > links auf: Debugging > Edit&Continue > "Require source files to exactly match the original version" deaktivieren
Vielleicht ändert das was.

Ach und btw. wenn man VS nicht im vorgeschlagenen Verzeichnis installiert, dann ist es nur noch halb so schnell, weil der WindowsDefender dann nicht mehr seine hardgecodeten Ausnahmeregeln anwendet und alle möglichen Files beim Zugriff scannt (wenn man ihn denn an hat) :-O
Benutzeravatar
Schrompf
Moderator
Beiträge: 4838
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von Schrompf »

NytroX hat geschrieben: 04.06.2023, 11:08 Ach und btw. wenn man VS nicht im vorgeschlagenen Verzeichnis installiert, dann ist es nur noch halb so schnell, weil der WindowsDefender dann nicht mehr seine hardgecodeten Ausnahmeregeln anwendet und alle möglichen Files beim Zugriff scannt (wenn man ihn denn an hat) :-O
Ach fuck, das würde einiges erklären
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von starcow »

Krishty hat geschrieben: 31.05.2023, 20:49 Das Stichwort heißt Build Tools for Visual Studio; herunterladen kannst du sie etwa hier (runterscrollen zu den Suchergebnissen). Das installiert dir Compiler und Linker ohne restliche Visual-Studio-IDE.
Ich kanns mir nicht erklären, aber irgendwie wird hier bei mir kein Compiler (cl.exe) und kein Linker (link.exe) mit diesem Build-Tool installiert.
Ich habe es auf zwei Systemen versucht. Die Dateien sind nach der Installation einfach nicht zu finden.
Diese müssten ja die selben sein, wie bei einer "regulären" Visual Studio Installation.
Jemand eine Idee, was da schief laufen könnte?

Edit:
Mann muss wohl noch zusätzlich folgende Komponente manuell anwählen

MSVC v143 - VS 2022 C++ - x64/x86-Buildtools (v14.36-17.6) (für die neuste Version)
Krishty hat geschrieben: 31.05.2023, 20:49 Hier bin ich etwas zögerlich. Du benutzt die #include-Pfade für Visual Studios Standardbibliothek und Laufzeitbibliotheken, obwohl Clang seine eigenen mitbringt (unter include und lib der Installation). Das klingt erstmal falsch, denn du möchtest ja Clang nutzen, wo möglich. Tatsächlich müsste ich prüfen, wie ich das bei mir gehandhabt habe.
Ich bin mir jetzt nicht sicher, ob ich dich da richtig verstehe: Unabhängig der Visual Studio Installation, muss man das Windows SDK jedoch in jedem Fall installieren, da Clang die Header der Standard C Library (.h Files) nicht mitbringt. Was mich an dieser Stelle dann wiederum etwas verwirrt: Einige Header Dateien, wie die stdint.h sind dann dennoch mit dabei, obwohl die ja genauso Teil der Standard C Library sind.

Könnte man es denn so zusammenfassen:
- Compiler und Linker von Clang
- Header und Libs aus dem Windows SDK

Demnach könnte man Visual Studio resp. die VS Build Tools für eine Minimalinstallation ersatzlos streichen?
So müsste das Ganze dann eigentlich ja portabel sein und könnte durch einfaches Kopieren "installiert" werden.
(vielleicht genau deine Idee einer Anleitung zu einer portablen Clang Installation?)
NytroX hat geschrieben: 02.06.2023, 23:16 Als weitere Alternative gibt es auch Zig. Ist quasi Clang in einem besseren Paket/Kompilat (single executable und kommt mit allen Libs, und kann cross-compilen). Bevor man sich mit MinGW und der nicht funktionierenden Clang lib sowie dem msys2-Kram rumschlägt... ist das doch wesentlich angenehmer zu benutzen.
Guter Hinweis, danke!
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von starcow »

Ich habe die Anleitung jetzt (dank euren Hinweisen) nochmals überarbeitet und angepasst.

Leider habe ich es nicht geschafft, Clang nur mittels der eigenen Installation, sowie dem Windows SDK zum Laufen zu bekommen.
Irgendwie fehlen da einfach immer einige Header-Dateien, so dass man dann doch noch die Buildtools von MSVC installieren muss.

Wenn man die Header- und Lib-Dateien von gcc verwendet, linken die offensichtlich zu msvcrt.dll, was ja anscheinend nicht ganz so ideal sein soll. Ich hab das dann im Debugger sehen können (danke Krishty für den wertvollen Hinweis und das scharfe Auge).

Jedenfalls braucht es wohl alle drei Komponenten (Clang, Buildtools, Windows SDK). Wieso nicht alle nötigen Header- und Lib-Dateien mit dem Windows SDK mitkommen, will sich mir an dieser Stelle nicht erschliessen.

Jetzt hoffe ich, dass in dieser, überarbeiteten Form, die Anleitung dem einen oder anderen Einsteiger trotzdem noch eine Hilfe sein kann.
Freelancer 3D- und 2D-Grafik
mischaschaub.com
NytroX
Establishment
Beiträge: 358
Registriert: 03.10.2003, 12:47

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von NytroX »

Das Linken zu msvcrt.dll ist kein Problem, das ist die C Runtime, die immer Teil von Windows ist.
Es ist nicht Teil der Redistributable, die man extra installieren müsste (wie z.B. MSVCR80.DLL usw.), es wäre nicht gut damit zu linken.
Siehe dazu auch: https://devblogs.microsoft.com/oldnewth ... 00/?p=1273
Wieso nicht alle nötigen Header- und Lib-Dateien mit dem Windows SDK mitkommen, will sich mir an dieser Stelle nicht erschliessen.
Ich glaube niemand versteht das :-)
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: Clang mit MSVC - minimale Installation (Anleitung)

Beitrag von starcow »

NytroX hat geschrieben: 20.06.2023, 20:35 Das Linken zu msvcrt.dll ist kein Problem, das ist die C Runtime, die immer Teil von Windows ist.
Es ist nicht Teil der Redistributable, die man extra installieren müsste (wie z.B. MSVCR80.DLL usw.), es wäre nicht gut damit zu linken.
Siehe dazu auch: https://devblogs.microsoft.com/oldnewth ... 00/?p=1273
Vielleicht hab ich's jetzt falsch verstanden: Ich hatte den von Krishty verlinkten Artikel https://devblogs.microsoft.com/oldnewth ... 00/?p=1273 so gedeutet, dass man die msvcrt.dll nicht mehr referenzieren sollte, da diese quasi "aufgegeben" (?) wurde.
Although MSVCRT.DLL has been an operating system DLL for a long time, and has been documented as off-limits to applications, there are still a lot of people who treat it as a C runtime delivery channel, and those programs create a lot of grief for the product team.
Wieso nicht alle nötigen Header- und Lib-Dateien mit dem Windows SDK mitkommen, will sich mir an dieser Stelle nicht erschliessen.
Ich glaube niemand versteht das :-)
Danke Nytro, das ist ja immerhin tröstlich zu hören :-)
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Antworten