Normalerweise gibt es bei der Entwicklung von Linux-Programmen zwei Möglichkeiten:
Obwohl ich direkt in der Linux-Umgebung entwickle, gibt es auch viele Leute, die Entwicklungsarbeiten in der Windows-Umgebung durchführen. Wenn sie das vertraute System verlassen und in eine unbekannte Umgebung wechseln, kann dies ihre Arbeitseffizienz beeinträchtigen. Deshalb werden wir uns heute ansehen, wie man Visual Studio 2019 unter Windows für die Remote-Entwicklung unter Linux verwendet und wie man häufige Fehler vermeidet. Einführung in die plattformübergreifenden Entwicklungsfunktionen von Visual Studio Ab Visual Studio 2017 hat Microsoft die plattformübergreifende Entwicklungsfunktion von VS eingeführt. Sie können den Code in VS bearbeiten und dann eine plattformübergreifende Kompilierung und Remote-Debugging durchführen, wodurch die Arbeit, die wir ursprünglich manuell erledigen mussten, automatisiert wird und unsere Belastung erheblich reduziert wird. Zu den unterstützten Plattformen gehören Android und Linux. Auf diese Hauptfunktionen werden wir uns heute konzentrieren. Vielleicht sind Sie neugierig, wie VS Remote-Entwicklung durchführt. Obwohl Sie Entwicklung durchführen können, ohne dieses Wissen zu verstehen, hoffe ich dennoch, in zwei Minuten eine kurze Erklärung geben zu können. Die Remote-Entwicklung mit vs gliedert sich in zwei Schritte:
Nachdem Sie die obigen Schritte abgeschlossen haben, können Sie Ihre eigenen plattformübergreifenden Programme in VS debuggen. Verwenden von vs2019 für die Linux-Remoteentwicklung Dies ist das Ende der Einführung. Werfen wir einen Blick auf das grafische Tutorial zur Linux-Entwicklung in vs2019. Bevor wir beginnen, müssen wir einige Vorbereitungen treffen:
Nun, da wir bereit sind, kommen wir zur Sache. Erstellen eines Projekts Nach der Installation der C++-Funktion für Linux wird im Fenster zum Erstellen eines neuen Projekts die Option „Linux“ angezeigt, wie in der Abbildung dargestellt: Hier haben wir uns für die traditionelle vs-Projekt-Lösung entschieden, um ein leeres Konsolenprogramm zu erstellen. In den nachfolgenden Artikeln erfahren Sie auch, wie Sie ein cmake-Projekt erstellen, was hier vorerst nicht erwähnt wird. Dazu gibt es nicht viel zu sagen. Wähle den Speicherort des Projekts aus. Beachte, dass es sich um einen lokalen Speicherort handelt. Der Speicherort des Remote-Rechners wird später konfiguriert: Klicken Sie auf „Erstellen“ und unser Remote-Entwicklungsprojekt wird erfolgreich erstellt. Konfigurieren eines Remote-Projekts VS kann die Konfiguration eines leeren Projekts nicht bearbeiten. Daher erstellen wir zunächst eine Der Remotecomputer wird während des Debuggens im Remote Connection Manager hinzugefügt. Im Normalfall sind hier keine Änderungen erforderlich, es sei denn, Sie müssen den Projekttyp oder den Speicherort der zusammengestellten Ergebnisse ändern. Sollten mehrere Remote-Umgebungen vorhanden sein, können Sie diese hier auch auswählen. Der Debugging-Teil stellt Als nächstes kommt der Schlüsselpunkt der Konfiguration. Konfigurieren Sie zunächst die Header-Dateien der Remote-Umgebung, die synchronisiert werden müssen. Mit diesen Dateien kann VS Ihren Code automatisch vervollständigen und abfragen: Der standardmäßig kopierte Pfad enthält unter Linux normalerweise bereits die meisten Header-Dateien und wir müssen normalerweise keine Änderungen vornehmen. Die Synchronisierung der Header-Dateien erfolgt nach dem ersten erfolgreichen Build des Projekts oder einer manuellen Synchronisierung nach dem Hinzufügen einer Remote-Verbindung. Als nächstes folgt die Wahl des C/C++-Compilers, d. h. die Konfiguration der gcc- und g++-Kompilierungsparameter. Die Erläuterung dieser Parameter geht über den Rahmen unserer Diskussion hinaus. Hier müssen wir nur die entsprechende C++-Standardversion auswählen: Hier haben wir C++17 gewählt. Die anderen Einstellungen sind dieselben wie bei der Entwicklung unter Windows. VS kann sie automatisch in G++-Parameter umwandeln, daher werde ich hier nicht näher darauf eingehen. Hinzufügen einer Remote-Umgebung Nur mit einer Remote-Umgebung können wir Header-Dateien synchronisieren oder Debugging-Vorgänge durchführen. Wenn Sie Ihr Projekt zum ersten Mal kompilieren oder debuggen, verbindet VS Sie automatisch mit der Remote-Umgebung. Natürlich empfehlen wir, dies unter Debug->Optionen->Plattformübergreifend->Verbindungsmanager einzurichten: Geben Sie Ihre Remote-IP/Domänennamen ein. Der Standard-SSH-Port ist 22. Aus Sicherheitsgründen müssen Sie ihn auf einen anderen Port ändern. Die Standardkonfiguration wird zu Demonstrationszwecken verwendet. Das Passwort ist dasselbe wie oben. Sie sollten erwägen, für die Anmeldung einen sichereren privaten SSH-Schlüssel zu verwenden. Nach erfolgreicher Anmeldung wird die Verbindung hinzugefügt. Wir können sehen, dass sich unter dem Manager auch ein Einstellungselement für den Remote-Header-Manager befindet, mit dem die Header-Datei synchronisiert wird: Durch Klicken auf die Schaltfläche „Aktualisieren“ wird die Synchronisierung der Header-Dateien gestartet, die lokal zwischengespeichert werden. Da eine große Anzahl von Dateien gleichzeitig vom Remote-Computer kopiert werden muss, kann dies lange dauern. Nachdem die Remote-Umgebung hinzugefügt wurde, können Sie mit dem Schreiben von Code beginnen. Lokales Schreiben und Remote-Debugging Jetzt können Sie Code für Linux in VS schreiben und die automatische Vervollständigung funktioniert einwandfrei: Sie sehen, dass die Headerdateien und -strukturen in Linux wiedererkennbar sind. Wenn Sie feststellen, dass eine automatische Vervollständigung nicht möglich ist (passiert normalerweise nach dem Hinzufügen einer Remoteverbindung oder dem Ändern der Projekteinstellungen), versuchen Sie, vs zu schließen und erneut zu öffnen. Wenn das nicht funktioniert, versuchen Sie, Intellisense zu aktualisieren oder die Headerdateien erneut zu synchronisieren. Nach der Bearbeitung können wir auf die Schaltfläche „Debuggen“ klicken, um unser Programm auszuführen: Beachten Sie, dass die erstellte Architektur mit der Remote-Umgebung übereinstimmen muss. Wenn die Remote-Umgebung beispielsweise x64 ist, können Sie hier x64 oder x86 auswählen, aber nicht arm, da sonst ein Fehler gemeldet wird. Dies ist der Testcode, der die Version des aktuellen Linux-Systemkernels ausgibt: #include <sys/utsname.h> #include <iostream> #einschließen <cstdio> int main() { automatischer Start = Chrono::hochauflösende Uhr::jetzt(); utsname Namen; wenn (uname(&namen) != 0) { std::perror("kann unames nicht abrufen"); } std::cout << "Linux-Kernelversion: " << Namen.Release << std::endl; } Klicken Sie auf Debug->Linux-Konsole. Daraufhin wird eine interaktive Konsole angezeigt, in der Sie Inhalte eingeben oder die Ausgabe des Programms anzeigen können: Das Programm wurde erfolgreich ausgeführt. Vermeiden Sie Fallstricke Nachdem die Remote-Kompilierung erfolgreich abgeschlossen wurde, können wir den vs-Debugger verwenden, um Haltepunkte zu setzen, Variablen an Haltepunkten anzuzeigen und sogar dynamische Leistungsanalysen auf dem laufenden Linux durchzuführen. Doch zuvor gilt es noch einige Fallstricke zu vermeiden. Chinesische verstümmelte Schriftzeichen Die durch Kodierungsprobleme verursachten Probleme stehen immer an erster Stelle. Schließlich werden die Leute unweigerlich nervös, wenn sie sehen, dass die erwartete Ausgabe tatsächlich aus einer Reihe verstümmelter Zeichen besteht. Wie wir alle wissen, waren Kodierungsprobleme schon immer ein schwieriges Problem, insbesondere wenn die chinesische Umgebung unter Windows normalerweise GB18030 oder GBK ist, während sie unter Linux einheitlich als UTF-8 verwendet wird. Schauen wir uns ein praktisches Beispiel an. Wenn unser Programm nur ASCII-Zeichen enthält, kommt es normalerweise nicht so leicht zu Problemen. Deshalb fügen wir einige chinesische Zeichen hinzu: #include <sys/utsname.h> #include <iostream> #einschließen <cstdio> #include <Zeichenfolge> int main() { utsname Namen; wenn (uname(&namen) != 0) { std::perror("kann unames nicht abrufen"); } std::cout << "Linux-Kernelversion: " << Namen.Release << std::endl; std::cout << "Eingabeinhalt: "; std::string-Eingabe; std::cin >> Eingabe; std::cout << "Sie haben eingegeben: " << input << std::endl; } Für das obige Testprogramm haben wir einige chinesische Ausgabeinformationen hinzugefügt. Öffnen Sie nun die Konsole zum Debuggen: Sie können sehen, dass die chinesische Ausgabe verstümmelt ist. Wir geben einige Informationen ein und dies ist das Ergebnis: Es ist ersichtlich, dass die im Programm geschriebenen chinesischen Schriftzeichen verstümmelt sind, unsere Eingabe jedoch nicht. Der Grund ist ganz einfach. Bei der Eingabe in der Linux-Konsolenumgebung ist die Standardkodierung utf8, sodass unsere Eingabe korrekt kodiert ist und der Inhalt in der Quelldatei GB18030 ist, sodass in der Linux-Konsole (die Daten standardmäßig in utf8 dekodiert und anzeigt) verstümmelte Zeichen auftreten. Wenn man die Fehlerursache kennt, ist die Lösung sehr einfach. Man muss nur die Kodierung der Quelldatei in utf8 ändern. Wir wählen die einfachste Methode und ändern die Kodierung in Speichern Sie die Datei nach dem Einstellen. Jetzt wurde die Dateikodierung auf utf8 geändert. Führen Sie nun das geänderte Programm aus: Auch die Laufergebnisse sind normal: Verwenden von mathematischen Funktionen und Bibliotheken von Drittanbietern Die Verwendung der von der Standardbibliothek bereitgestellten mathematischen Funktionen unter Linux ist ebenfalls ein häufiges Problem. Je nachdem, ob Sie cpp oder c verwenden, treten die folgenden Situationen auf:
Normalerweise müssen wir uns unter Windows darüber keine Gedanken machen, aber bei der Verwendung der Sprache C unter Linux ist dieses Problem schwer zu ignorieren. Um auf Nummer sicher zu gehen, sollten Sie beim Schreiben eines C-Programms, das mathematische Funktionen verwendet, immer angeben, dass Sie gegen libm verknüpfen. Darüber hinaus müssen Sie auch vorsichtig sein, wenn Sie Bibliotheken von Drittanbietern wie Boost verwenden. Unter Windows geben wir normalerweise das zusätzliche Include-Verzeichnis und das zusätzliche Bibliotheksverzeichnis an, um normal zu kompilieren. Unter Linux muss der Name der Linkbibliothek jedoch explizit angegeben werden, sodass wir ihn in den Projekteigenschaften festlegen. Unter Linux können wir pkg-config verwenden, um die oben genannte sich wiederholende Arbeit zu reduzieren, aber in vs können wir dieses Tool nicht direkt verwenden. Wenn Ihr Projekt eine große Anzahl von Bibliotheken von Drittanbietern verwendet, wird dies zu einem großen Problem. Wenn Sie dieses Problem lösen möchten, können Sie auf das vs+cmake-Build-Projekt verweisen, das ich in nachfolgenden Artikeln vorstellen werde. Als nächstes fügen wir dem Beispiel einige Boost-Chrono-Funktionstests hinzu. Unter Linux müssen wir Hier ist der vollständige Code: #include <sys/utsname.h> #include <iostream> #einschließen <cstdio> #include <Zeichenfolge> #include <boost/chrono.hpp> int main() { Namespace Chrono = Boost::Chrono; automatischer Start = Chrono::hochauflösende Uhr::jetzt(); utsname Namen; wenn (uname(&namen) != 0) { std::perror("kann unames nicht abrufen"); } std::cout << "Linux-Kernelversion: " << Namen.Release << std::endl; std::cout << "Eingabeinhalt: "; std::string-Eingabe; std::cin >> Eingabe; std::cout << "Sie haben eingegeben: " << input << std::endl; automatischer Zähler = chrono::duration_cast<chrono::milliseconds>(chrono::high_resolution_clock::now() - Start); std::cout << "Das Programm wurde ausgeführt: " << counter.count() << "ms\n"; } Klicken Sie auf die Schaltfläche „Ausführen“. Das Programm kann normal debuggt werden. Andernfalls wird ein Fehler gemeldet: Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Lösung zum automatischen Neustart von MySQL
Inhaltsverzeichnis Erster Blick Erstellen einer V...
Vorwort Die MySQL Master-Slave-Replikation ist di...
vue-cli verwendet stimulsoft.reports.js (Tutorial...
Vor kurzem habe ich ein Projekt, bei dem ich mit i...
Inhaltsverzeichnis 1. Zahlen in JavaScript 2. Mat...
In diesem Artikelbeispiel wird der spezifische Co...
1. Servicemethode Überprüfen Sie den Firewall-Sta...
Installieren Sie vsftpd $ sudo apt-get installier...
Der Artikel zeichnet hauptsächlich den einfachen ...
Der HTTP-Statuscode ist ein dreistelliger Code, d...
Entwicklungshintergrund: Ich arbeite derzeit an e...
1. Nachfrage Das Backend stellt solche Daten bere...
Inhaltsverzeichnis Hintergrund Beispiel Missverst...
Code zur Änderung des CSS-Bildlaufleistenstils .s...
1. Nutzung auf höchster Ebene 1. Installieren Sie...