GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Schreiben und Debuggen von Linux-C++-Anwendungen aus Visual Studio mit dem Windows-Subsystem für Linux

Ich habe schon oft über das „Windows Subsystem for Linux“ (auch bekannt als „Bash on Ubuntu on Windows“) gebloggt. Die Reaktion auf diese Windows-Funktion war etwas komisch, weil die Leute Folgendes versuchen:

  • Minimiere es - "Oh, es ist nur Cygwin." (Eigentlich nicht, es sind die eigentlichen Ubuntu-Elfen-Binärdateien, die auf einer Ebene ausgeführt werden, die den Linux-Kernel abstrahiert.)
  • Entwerfen - "Also ist es ein Docker-Container? Eine VM?" (Auch hier handelt es sich um ein ganzes Subsystem. Es leistet VIEL mehr, als Sie denken, und es ist SCHNELLER als eine VM.)

Hier ist eine einfache Erklärung von Andrew Pardoe:

1. Der Entwickler/Benutzer verwendet eine Bash-Shell.
2. Die Bash-Shell läuft auf einer Installation von Ubuntu
3. Die Ubuntu-Installation wird auf einem Windows-Subsystem ausgeführt. Dieses Subsystem wurde entwickelt, um Linux zu unterstützen.

Es ist ziemlich cool. WSL hat mich ehrlich gesagt dazu gebracht, Windows auszuführen, weil ich cmd, Powershell ODER Bash (oder zsh oder Fish) ausführen kann. Sie können vim, emacs, tmux und Javascript/node.js, Ruby, Python, C/C++, C# &F#, Rust, Go und mehr ausführen. Sie können jetzt auch sshd, MySQL, Apache, lighttpd ausführen, solange Sie wissen, dass die Hintergrunddienste heruntergefahren werden, wenn Sie Ihre letzte Konsole schließen. Bash unter Windows ist für Entwickler, nicht für Hintergrund-Server-Apps. Und natürlich kannst du dir deinen Weg zum Ruhm bahnen.

Bash unter Windows führt Ubuntu-Benutzermodus-Binärdateien aus, die von Canonical bereitgestellt werden. Das bedeutet, dass die Befehlszeilenprogramme die gleichen sind wie diejenigen, die in einer nativen Ubuntu-Umgebung ausgeführt werden.

Ich wollte mit Visual Studio in Windows eine Linux-Konsolen-App in C++ schreiben. Wieso den? Warum nicht? Ich mag VS.

Einrichten von Visual Studio 2017 zum Kompilieren und Debuggen von C++-Apps unter Linux

  • Ich habe die Visual Studio Community, die für kleine Gruppen kostenlos und Open Source ist.
    • Wenn Sie es bereits installiert haben, stellen Sie sicher, dass Sie das Visual Studio-Installationsprogramm erneut ausführen (es ist schnell, keine Sorge) und wählen Sie Linux aus:
  • Ich stelle sicher, dass mein Windows 10 auf dem neuesten Stand ist und Bash auf Ubuntu installiert ist.
    • Die „Windows 10 Creators Edition“ ist am 11. April erhältlich, aber wenn Sie ein Windows-Insider sind oder den Update-Assistenten verwenden, können Sie sie am 5. April erhalten. Es enthält eine Reihe von Verbesserungen für Bash unter Windows (Versionshinweise)

Stellen Sie dann in der Bash-Shell sicher, dass Sie build-essential, den Server von gdb und den Server von openssh haben:

$ sudo apt update
$ sudo apt install -y build-essential
$ sudo apt install -y gdbserver
$ sudo apt install -y openssh-server

Öffnen Sie dann /etc/ssh/sshd_config mit vi (oder nano) wie

sudo nano /etc/ssh/sshd_config

und legen Sie der Einfachheit halber PasswordAuthentication fest auf ja . Denken Sie daran, dass es kein so großes Sicherheitsproblem ist, wie Sie denken, da der SSHD-Daemon geschlossen wird, wenn Ihre letzte Konsole dies tut, und weil das WSL-Subsystem gut mit Windows zusammenarbeiten muss, ist es in die Windows-Firewall und alle seine bestehenden Regeln eingeweiht, plus wir sprechen auch von localhost.

Generieren Sie nun SSH-Schlüssel und starten Sie den Dienst manuell:

$ sudo ssh-keygen -A
$ sudo service ssh start

Erstellen Sie eine Linux-App in Visual Studio (oder öffnen Sie eine Makefile-App):

Stellen Sie sicher, dass Sie Ihr Ziel kennen (x64, x86, ARM):

Im Cross Platform Connection Manager von Visual Studio können Sie Ihre SSH-Verbindungen steuern (und auf Wunsch auch Verbindungen mit privaten Schlüsseln einrichten).

Boom. Ich schreibe C++ für Linux in Visual Studio unter Windows ... und führe es auf dem lokalen Linux-Subsystem aus, kompiliere und debugge es

Übrigens, für diejenigen unter Ihnen, die wie ich Ihre kleinen Linux-Computer mit Raspberry Pi lieben, ist dies eine großartige Möglichkeit, C++ auch für diese kleinen Geräte zu schreiben. Es gibt sogar ein Blink-Beispiel in Datei | Neues Projekt zu starten.

Auch für diejenigen unter Ihnen, die sehr fortgeschritten sind, hören Sie auf, Mingw-w64 zu verwenden, und machen Sie coole Sachen wie das Kompilieren von gcc 6.3 aus dem Quellcode unter WSL und VS verwenden! Mir war nicht klar, dass Sie mit der C++-Unterstützung von Visual Studio zwischen einer Reihe von C++-Compilern wählen können, darunter sowohl GCC als auch Clang.

Sponsor: Danke an Redgate! Verfolgen Sie jede Änderung an Ihrer Datenbank ! Sehen Sie mit der SQL-Quellcodeverwaltung, wer Änderungen vorgenommen hat, was sie getan haben und warum. Holen Sie sich einen vollständigen Versionsverlauf in Ihrem Quellcodeverwaltungssystem. Siehe wie.

Linux
  1. Schreiben von Python-Anwendungen, Erstellen von Linux-Labs und weitere Tipps für Systemadministratoren

  2. Windows – Wie erzwinge ich Codepage/Gebietsschema (anders als das Linux-Systemgebietsschema) für Nicht-Unicode-Wine-Anwendungen?

  3. Kali auf dem Windows-Subsystem für Linux

  4. Verwendung des Windows-Subsystems für Linux (WSL) von Sublime Text

  5. Wie stelle ich die Größe des X-Mauszeigers im Windows-Subsystem für Linux ein?

So führen Sie Windows-Anwendungen und -Spiele unter Linux mit Wine aus

Der ultimative Leitfaden zum Windows-Subsystem für Linux (Windows WSL)

Verwenden von Tailscale unter Windows für eine einfachere Vernetzung mit WSL2 und Visual Studio Code

Offizieller Support für das Remotedebuggen einer .NET Core-Linux-App in WSL2 von Visual Studio unter Windows

Remotedebuggen einer .NET Core-Linux-App in WSL2 von Visual Studio unter Windows

So installieren und konfigurieren Sie das Windows-Subsystem für Linux