Kompilieren Sie CPP-Dateien mit G++ in Ubuntu

Kompilieren Sie CPP-Dateien mit G++ in Ubuntu

Als ich die CPP-Datei zum ersten Mal mit G++ kompilierte, wurde ein Fehler wegen nicht definierter Referenz gemeldet. Alle Funktionen in der benutzerdefinierten Klasse konnten nicht gefunden werden. Nach einer Suche nach Informationen stellte ich fest, dass die aufgerufene Klasse verknüpft werden musste. Dieser Artikel beschreibt den Kompilierungsprozess anhand eines kleinen Beispiels. Die Klasse class2 ruft die Memberfunktion der Klasse class1 auf und ist von der Klasse class1 abhängig, während die Testdatei die Memberfunktion der Klasse class2 aufruft und von der Klasse class1 abhängig ist.

//Klasse1.h
#ifndef _CLASS1_H
#define _CLASS1_H
Klasse Klasse1
{
öffentlich:
  } f(int i);
};
#endif
//Klasse1.cpp
#include<iostream>
#include "class1.h"
Namespace std verwenden;
int Klasse1::f(int i)
{
  wenn (i==0 || i==1)
   Rückgabe 1;
  anders
   gibt f(i-1)+f(i-1) zurück;
}
//Klasse2.h
#ifndef _CLASS2_H
#define _CLASS2_H
#include "class1.h"
Klasse Klasse2
{
öffentlich:
  }
};
#endif
//Klasse2.cpp
#include<iostream>
#include "class2.h"
Namespace std verwenden;
int Klasse2::double_f(int i)
{
  Klasse1 c;
  gibt 2*cf(i) zurück;
}
//test.cpp
#include<iostream>
#include "class2.h"
Namespace std verwenden;
int main()
{
  Klasse2 c2;
  cout << c2.double_f(4) <<endl;
  gebe 0 zurück;
}

Kompilieren Sie zunächst die Dateien class1, class2 und test in Dateien im O-Format.

g++ -c class1.cpp
g++ -c class2.cpp
g++ -c test.cpp

Da Klasse1 und Klasse2 voneinander abhängig sind, müssen sie zum Verknüpfen in statische Bibliotheksdateien (.a-Format) verpackt werden.

ar -rc Klasse1.a Klasse1.o
ar -rc Klasse2.a Klasse2.o

Der letzte Schritt besteht darin, test.o in eine ausführbare Datei zu verknüpfen

g++ -o test test.o Klasse2.a Klasse1.a

Nach der Ausführung wird die ausführbare Datei test erhalten, die mit dem Befehl ./test ausgeführt werden kann. Achten Sie beim Verknüpfen auf die Reihenfolge der statischen Linkbibliotheken. Es ist notwendig, die Reihenfolge der Abhängigkeiten vorne und hinten sicherzustellen. Beispielsweise hängt hier Test von Klasse 2 ab und Klasse 2 hängt von Klasse 1 ab. Beim Verknüpfen muss Test vor Klasse 2 und Klasse 2 vor Klasse 1 geschrieben werden, da sonst ein undefinierter Referenzfehler auftritt.

So kompilieren Sie mehrere Dateien gleichzeitig mit g++

Für dieses Beispiel werden die Dateien im Verzeichnis /CPPPFrtory abgelegt. Verwenden Sie den Befehl CD, um in den Ordner zu wechseln, der die Quelldateien enthält.
Um ein Programm durch Auflisten der Dateien in der Befehlszeile zu kompilieren, geben Sie Folgendes ein:

Methode 1: g++ Hello.cpp Welcome2.cpp -o Welcome2.out -ansi //Zwei cpp-Quelldateien, nach der Kompilierung wird nur eine .out-Datei generiert. Methode 2: Verwenden Sie zum Kompilieren des Programms „Platzhalter“. Geben Sie ein: g++ *.cpp -o Welcome2.out -ansi //Verwenden Sie *, um alle zu kompilierenden Dateien im Verzeichnis zu ersetzen

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • Probleme und Lösungen bei der Installation von Mininet auf Ubuntu 16.04.4LTS
  • Konfigurieren Sie VIM als C++-Entwicklungseditor in Ubuntu
  • Anfangseinstellungen nach der Installation von Ubuntu 16 in der Entwicklungsumgebung
  • Ubuntu-Terminal, mehrere Fenster, geteilter Bildschirm, Terminator
  • So richten Sie den PostgreSQL-Start unter Ubuntu 16.04 ein
  • Installieren und verwenden Sie Git und GitHub unter Ubuntu Linux
  • Ubuntu 16.04 erstellt eine Entwicklungsumgebung für vim und python3
  • Foreman Ubuntu16 Schnellinstallation
  • Installieren Sie den Nvidia-Treiber in Ubuntu 18, um das Problem des schwarzen Bildschirms zu beheben und die Auflösung anzupassen
  • Einfache Implementierung der Unterstützung von PHP5- und PHP7-Doppelversionen in Ubuntu
  • Installieren Sie Mininet aus dem Quellcode auf Ubuntu 16.04

<<:  Node.js versendet E-Mails basierend auf dem STMP-Protokoll und dem EWS-Protokoll

>>:  Detaillierte Erläuterung der MySql-Analyse langsamer Abfragen und Öffnen des Protokolls langsamer Abfragen

Artikel empfehlen

MySQL-Joinpufferprinzip

Inhaltsverzeichnis 1. MySQL-Joinpuffer 2. JoinBuf...

JavaScript-Entwurfsmuster – Muster der Verantwortungskette

Inhaltsverzeichnis Überblick Code-Implementierung...

Was sind die Vorteile von MySQL MGR?

MGR (MySQL Group Replication) ist eine neue Funkt...

Lernbeispiel für den Nginx Reverse Proxy

Inhaltsverzeichnis 1. Reverse-Proxy-Vorbereitung ...

Detaillierte Analyse der MySQL MDL-Metadatensperre

Vorwort: Wenn Sie eine SQL-Anweisung in MySQL aus...

Einführung in die Verschlüsselung des Grub-Boot-Programms in Linux

Inhaltsverzeichnis 1. Was ist Grub-Verschlüsselun...

Implementierung eines Bootstrap-Webseiten-Layoutrasters

Inhaltsverzeichnis 1. So funktioniert das Bootstr...

Verwenden von System.Drawing.Common in Linux/Docker

Vorwort Nachdem das Projekt auf .net Core migrier...

Die Frontend-Entwicklung muss jeden Tag lernen, HTML-Tags zu verstehen (1)

2.1 Semantisierung sorgt dafür, dass Ihre Webseit...

So konfigurieren Sie Nginx zur Unterstützung von IPv6 unter Linux

1. Überprüfen Sie, ob das vorhandene Nginx IPv6 u...

Implementierung der Graustufenversion mit Nginx und Lua

Installieren Sie memcached yum install -y memcach...

Detaillierte Analyse des Event-Bubbling-Mechanismus in JavaScript

Was ist Blubbern? Es gibt drei Phasen im DOM-Erei...