Heim Betrieb und Instandhaltung Betrieb und Wartung von Linux So kompilieren Sie C++ mit g++ unter Linux

So kompilieren Sie C++ mit g++ unter Linux

Mar 26, 2018 am 09:32 AM
linux 使用 方法

Dieser Artikel zeigt Ihnen hauptsächlich die Methode zum Kompilieren von C++ mit g++ in der Linux-Umgebung und die Weitergabe verwandter Beispielcodes. Interessierte Freunde können daraus lernen. Ich hoffe, es hilft allen.

Eine einzelne Quelldatei generiert ein ausführbares Programm

Das Folgende ist der Code für ein einfaches C++-Programm, das in der Datei helloworld.cpp gespeichert ist:


/* helloworld.cpp */
#include <iostream>
int main(int argc,char *argv[])
{
  std::cout << "hello, world" << std::endl;
  return(0);
}
Nach dem Login kopieren

Das Programm verwendet cout, das in der Header-Datei iostream definiert ist, um eine einfache Zeichenfolge in die Standardausgabe zu schreiben. Dieser Code kann mit dem folgenden Befehl in eine ausführbare Datei kompiliert werden:


$ g++ helloworld.cpp
Nach dem Login kopieren

Der Compiler g++ kann ihn als C++-Quellcode identifizieren, indem er den Suffixnamen der Datei überprüft in der Befehlszeile angegeben. Die Standardaktion des Compilers: Kompilieren Sie die Quellcodedatei, um eine Objektdatei (Objektdatei) zu generieren, verknüpfen Sie die Objektdatei und die Funktionen in der libstdc++-Bibliothek, um ein ausführbares Programm zu erhalten. Anschließend löschen Sie die Objektdatei. Da der Dateiname des ausführbaren Programms nicht in der Befehlszeile angegeben wird, verwendet der Compiler den Standardwert a.out. Das Programm kann wie folgt ausgeführt werden:


$ ./a.out
hello, world
Nach dem Login kopieren

Ein häufigerer Ansatz besteht darin, den Dateinamen des ausführbaren Programms über die Option -o anzugeben. Der folgende Befehl erzeugt eine ausführbare Datei mit dem Namen helloworld:


$ g++ helloworld.cpp -o helloworld
Nach dem Login kopieren

Geben Sie den Programmnamen in die Befehlszeile ein, um ihn auszuführen:


$ ./helloworld
hello, world
Nach dem Login kopieren

Das Programm g++ ist eine spezielle Version, die die Standardsprache von gcc auf C++ setzt. Beim Verknüpfen wird automatisch die C++-Standardbibliothek anstelle der C-Standardbibliothek verwendet. Durch Befolgen der Namenskonvention des Quellcodes und Angabe des Namens der entsprechenden Bibliothek ist es möglich, gcc zum Kompilieren und Verknüpfen von C++-Programmen zu verwenden, wie im folgenden Beispiel gezeigt:


$ gcc helloworld.cpp -lstdc++ -o helloworld
Nach dem Login kopieren

Option -l (ell) Konvertieren Sie den darauf folgenden Namen in den Namen der Bibliothek libstdc++.a, indem Sie das Präfix lib und das Suffix .a hinzufügen. Anschließend wird im Standardbibliothekspfad nach der Bibliothek gesucht. Der Kompilierungsprozess und die Ausgabedateien von gcc sind genau die gleichen wie die von g++.

Auf den meisten Systemen installiert GCC ein Programm namens c++. Wenn es installiert ist, entspricht es g++, wie im folgenden Beispiel gezeigt, und die Verwendung ist konsistent:


$ c++ helloworld.cpp -o helloworld
Nach dem Login kopieren

Mehrere Quelldateien generieren ausführbare Programme

Wenn im g++-Befehl mehr als eine Quellcodedatei angegeben ist, werden alle kompiliert und in einer einzigen ausführbaren Datei verknüpft. Unten finden Sie eine Header-Datei namens speak.h; sie enthält die Definition einer Klasse, die nur eine Funktion enthält:


/* speak.h */
#include <iostream>
class Speak
{
  public:
    void sayHello(const char *);
};
Nach dem Login kopieren

Nachstehend finden Sie den Inhalt der Datei speak.h cpp: Der Funktionskörper, der die Funktion sayHello() enthält:


/* speak.cpp */
#include "speak.h"
void Speak::sayHello(const char *str)
{
  std::cout << "Hello " << str << "\n";
}
Nach dem Login kopieren

Die Datei hellospeak.cpp ist ein Programm, das die Speak-Klasse verwendet:


/* hellospeak.cpp */
#include "speak.h"
int main(int argc,char *argv[])
{
  Speak speak;
  speak.sayHello("world");
  return(0);
}
Nach dem Login kopieren

Der folgende Befehl kompiliert und verknüpft die beiden oben genannten Quellcodedateien zu einem einzigen ausführbaren Programm:


$ g++ hellospeak.cpp speak.cpp -o hellospeak
Nach dem Login kopieren

PS: Lass uns Sprechen Sie darüber, warum die Datei „speak.h“ im Befehl nicht erwähnt wird (der Grund ist: „#include „speak.h““ ist in „speak.cpp“ enthalten, was bedeutet, dass das System-Header-Dateiverzeichnis zuerst durchsucht wird für die Datei „speak.h“ im aktuellen Verzeichnis. Und „speak.h“ befindet sich in diesem Verzeichnis und muss nicht im Befehl angegeben werden.

Quelldatei generiert Objektdatei

Die Option -c wird verwendet, um den Compiler anzuweisen, den Quellcode zu kompilieren, aber keine Verknüpfung und Ausgabe durchzuführen Das Ergebnis ist eine Objektdatei. Der Standarddateiname ist derselbe wie der Quelldateiname, außer dass das Suffix in .o geändert wird. Der folgende Befehl kompiliert beispielsweise die Quellcodedatei hellospeak.cpp und generiert die Objektdatei hellospeak.o:


$ g++ -c hellospeak.cpp
Nach dem Login kopieren

Der Befehl g++ kann auch .o erkennen Dateien und behandeln sie als Eingabedateien, die an den Linker übergeben werden. Der folgende Befehl kompiliert Quelldateien in Objektdateien und verknüpft sie zu einem einzigen ausführbaren Programm:


$ g++ -c hellospeak.cpp 
$ g++ -c speak.cpp 
$ g++ hellospeak.o speak.o -o hellospeak
Nach dem Login kopieren

Die Option -o kann verwendet werden, um mehr als nur eine ausführbare Datei zu benennen Dateien. Es wird auch verwendet, um andere vom Compiler ausgegebene Dateien zu benennen. Beispiel: Abgesehen davon, dass die Zwischenobjektdateien unterschiedliche Namen haben, generiert der folgende Befehl genau dieselbe ausführbare Datei wie oben:


$ g++ -c hellospeak.cpp -o hspk1.o 
$ g++ -c speak.cpp -o hspk2.o 
$ g++ hspk1.o hspk2.o -o hellospeak
Nach dem Login kopieren

Vorverarbeitung kompilieren

Option -E bewirkt, dass g++ den Quellcode mit dem Kompilierungspräprozessor verarbeitet und keine anderen Aktionen mehr ausführt. Der folgende Befehl verarbeitet die Quelldatei helloworld.cpp vor und zeigt die Ergebnisse in der Standardausgabe an:


$ g++ -E helloworld.cpp
Nach dem Login kopieren

Der Quellcode von helloworld.cpp, der weiter oben in diesem Artikel aufgeführt ist, Es gibt nur sechs Zeilen und das Programm zeigt lediglich eine Textzeile an, aber die vorverarbeitete Version wird über 1200 Zeilen umfassen. Dies liegt hauptsächlich daran, dass die Header-Datei iostream enthalten ist und andere Header-Dateien enthält. Darüber hinaus gibt es Definitionen mehrerer Klassen, die die Eingabe und Ausgabe verarbeiten.

Das GCC-Suffix der vorverarbeiteten Datei ist .ii, das mit der Option -o generiert werden kann, zum Beispiel:


$ gcc -E helloworld.cpp -o helloworld.ii
Nach dem Login kopieren

Assembler-Code generieren

Die Option -S weist den Compiler an, das Programm in Assembler zu kompilieren, den Assembler-Code auszugeben und dann zu beenden. Der folgende Befehl generiert die Assembler-Sprachdatei helloworld.s aus der C++-Quellcodedatei:


$ g++ -S helloworld.cpp
Nach dem Login kopieren

生成的汇编语言依赖于编译器的目标平台。

创建静态库

静态库是编译器生成的一系列对象文件的集合。链接一个程序时用库中的对象文件还是目录中的对象文件都是一样的。库中的成员包括普通函数,类定义,类的对象实例等等。静态库的另一个名字叫归档文件(archive),管理这种归档文件的工具叫 ar 。

在下面的例子中,我们先创建两个对象模块,然后用其生成静态库。

头文件 say.h 包含函数 sayHello() 的原型和类 Say 的定义:


/* say.h */
#include <iostream>
void sayhello(void);
class Say {
  private:
    char *string;
  public:
    Say(char *str)
    {
      string = str;
    }
    void sayThis(const char *str)
    {
      std::cout << str << " from a static library\n";
    }
    void sayString(void);
};
Nach dem Login kopieren

下面是文件 say.cpp 是我们要加入到静态库中的两个对象文件之一的源码。它包含 Say 类中 sayString() 函数的定义体;类 Say 的一个实例 librarysay 的声明也包含在内:


/* say.cpp */
#include "say.h"
void Say::sayString()
{
  std::cout << string << "\n";
}
 
Say librarysay("Library instance of Say");
Nach dem Login kopieren

源码文件 sayhello.cpp 是我们要加入到静态库中的第二个对象文件的源码。它包含函数 sayhello() 的定义:


/* sayhello.cpp */
#include "say.h"
void sayhello()
{
  std::cout << "hello from a static library\n";
}
Nach dem Login kopieren

下面的命令序列将源码文件编译成对象文件,命令 ar 将其存进库中:


$ g++ -c sayhello.cpp
$ g++ -c say.cpp
$ ar -r libsay.a sayhello.o say.o
Nach dem Login kopieren

程序 ar 配合参数 -r 创建一个新库 libsay.a 并将命令行中列出的对象文件插入。采用这种方法,如果库不存在的话,参数 -r 将创建一个新的库,而如果库存在的话,将用新的模块替换原来的模块。

下面是主程序 saymain.cpp,它调用库 libsay.a 中的代码:


/* saymain.cpp */
#include "say.h"
int main(int argc,char *argv[])
{
  extern Say librarysay;
  Say localsay = Say("Local instance of Say");
  sayhello();
  librarysay.sayThis("howdy");
  librarysay.sayString();
  localsay.sayString();
  return(0);
}
Nach dem Login kopieren

该程序可以下面的命令来编译和链接:


$ g++ saymain.cpp libsay.a -o saymain
Nach dem Login kopieren

程序运行时,产生以下输出:


hello from a static library
howdy from a static library
Library instance of Say
Local instance of Say
Nach dem Login kopieren

ps:如果一个文件夹下有多个cpp文件需要编译的话,除了采用makefile的方式之外,还可以使用“g++ *.cpp -o hello",“hello为编译生成的可执行文件的名字”,编译时要确保cpp文件和他们各自所引用的头文件在同一个目录下。

相关推荐:

在Linux环境下g++编译GDAL动态库的操作方法

Linux下g++编译以及使用静态库和动态库的方法详解

Linux下如何实现C++操作Mysql数据库的详细介绍


Das obige ist der detaillierte Inhalt vonSo kompilieren Sie C++ mit g++ unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Unterschied zwischen CentOS und Ubuntu Unterschied zwischen CentOS und Ubuntu Apr 14, 2025 pm 09:09 PM

Die wichtigsten Unterschiede zwischen CentOS und Ubuntu sind: Ursprung (CentOS stammt von Red Hat, für Unternehmen; Ubuntu stammt aus Debian, für Einzelpersonen), Packungsmanagement (CentOS verwendet yum, konzentriert sich auf Stabilität; Ubuntu verwendet apt, für hohe Aktualisierungsfrequenz), Support Cycle (Centos) (CENTOS bieten 10 Jahre. Tutorials und Dokumente), Verwendungen (CentOS ist auf Server voreingenommen, Ubuntu ist für Server und Desktops geeignet). Weitere Unterschiede sind die Einfachheit der Installation (CentOS ist dünn)

So installieren Sie CentOs So installieren Sie CentOs Apr 14, 2025 pm 09:03 PM

CentOS -Installationsschritte: Laden Sie das ISO -Bild herunter und verbrennen Sie bootfähige Medien. Starten und wählen Sie die Installationsquelle; Wählen Sie das Layout der Sprache und Tastatur aus. Konfigurieren Sie das Netzwerk; Partition die Festplatte; Setzen Sie die Systemuhr; Erstellen Sie den Root -Benutzer; Wählen Sie das Softwarepaket aus; Starten Sie die Installation; Starten Sie nach Abschluss der Installation von der Festplatte neu und starten Sie von der Festplatte.

CentOS 'Wahl nach der Beendigung der Wartung CentOS 'Wahl nach der Beendigung der Wartung Apr 14, 2025 pm 08:51 PM

CentOS wurde eingestellt, Alternativen umfassen: 1. Rocky Linux (beste Kompatibilität); 2. Almalinux (kompatibel mit CentOS); 3. Ubuntu Server (Konfiguration erforderlich); 4. Red Hat Enterprise Linux (kommerzielle Version, bezahlte Lizenz); 5. Oracle Linux (kompatibel mit CentOS und RHEL). Bei der Migration sind Überlegungen: Kompatibilität, Verfügbarkeit, Unterstützung, Kosten und Unterstützung in der Gemeinde.

So verwenden Sie Docker Desktop So verwenden Sie Docker Desktop Apr 15, 2025 am 11:45 AM

Wie benutze ich Docker Desktop? Docker Desktop ist ein Werkzeug zum Ausführen von Docker -Containern auf lokalen Maschinen. Zu den zu verwendenden Schritten gehören: 1.. Docker Desktop installieren; 2. Start Docker Desktop; 3.. Erstellen Sie das Docker -Bild (mit Dockerfile); 4. Build Docker Image (mit Docker Build); 5. Docker -Container ausführen (mit Docker Run).

Detaillierte Erklärung des Docker -Prinzips Detaillierte Erklärung des Docker -Prinzips Apr 14, 2025 pm 11:57 PM

Docker verwendet Linux -Kernel -Funktionen, um eine effiziente und isolierte Anwendungsumgebung zu bieten. Sein Arbeitsprinzip lautet wie folgt: 1. Der Spiegel wird als schreibgeschützte Vorlage verwendet, die alles enthält, was Sie für die Ausführung der Anwendung benötigen. 2. Das Union File System (UnionFS) stapelt mehrere Dateisysteme, speichert nur die Unterschiede, speichert Platz und beschleunigt. 3. Der Daemon verwaltet die Spiegel und Container, und der Kunde verwendet sie für die Interaktion. 4. Namespaces und CGroups implementieren Container -Isolation und Ressourcenbeschränkungen; 5. Mehrere Netzwerkmodi unterstützen die Containerverbindung. Nur wenn Sie diese Kernkonzepte verstehen, können Sie Docker besser nutzen.

Was zu tun ist, nachdem CentOS die Wartung gestoppt hat Was zu tun ist, nachdem CentOS die Wartung gestoppt hat Apr 14, 2025 pm 08:48 PM

Nachdem CentOS gestoppt wurde, können Benutzer die folgenden Maßnahmen ergreifen, um sich damit zu befassen: Wählen Sie eine kompatible Verteilung aus: wie Almalinux, Rocky Linux und CentOS Stream. Migrieren Sie auf kommerzielle Verteilungen: wie Red Hat Enterprise Linux, Oracle Linux. Upgrade auf CentOS 9 Stream: Rolling Distribution und bietet die neueste Technologie. Wählen Sie andere Linux -Verteilungen aus: wie Ubuntu, Debian. Bewerten Sie andere Optionen wie Container, virtuelle Maschinen oder Cloud -Plattformen.

Welche Computerkonfiguration ist für VSCODE erforderlich? Welche Computerkonfiguration ist für VSCODE erforderlich? Apr 15, 2025 pm 09:48 PM

VS Code system requirements: Operating system: Windows 10 and above, macOS 10.12 and above, Linux distribution processor: minimum 1.6 GHz, recommended 2.0 GHz and above memory: minimum 512 MB, recommended 4 GB and above storage space: minimum 250 MB, recommended 1 GB and above other requirements: stable network connection, Xorg/Wayland (Linux)

Was tun, wenn das Docker -Bild fehlschlägt? Was tun, wenn das Docker -Bild fehlschlägt? Apr 15, 2025 am 11:21 AM

Fehlerbehebung Schritte für fehlgeschlagene Docker -Bild Build: Überprüfen Sie die Dockerfile -Syntax und die Abhängigkeitsversion. Überprüfen Sie, ob der Build -Kontext den erforderlichen Quellcode und die erforderlichen Abhängigkeiten enthält. Sehen Sie sich das Build -Protokoll für Fehlerdetails an. Verwenden Sie die Option -Target -Option, um eine hierarchische Phase zu erstellen, um Fehlerpunkte zu identifizieren. Verwenden Sie die neueste Version von Docker Engine. Erstellen Sie das Bild mit--t [Bildname]: Debugg-Modus, um das Problem zu debuggen. Überprüfen Sie den Speicherplatz und stellen Sie sicher, dass dies ausreicht. Deaktivieren Sie Selinux, um eine Störung des Build -Prozesses zu verhindern. Fragen Sie Community -Plattformen um Hilfe, stellen Sie Dockerfiles an und erstellen Sie Protokollbeschreibungen für genauere Vorschläge.

See all articles