Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Detaillierte Erläuterung der G++-Kompilierung und Verwendung statischer und dynamischer Bibliotheken unter Linux

Detaillierte Erläuterung der G++-Kompilierung und Verwendung statischer und dynamischer Bibliotheken unter Linux

黄舟
黄舟Original
2017-05-28 11:32:404616Durchsuche

Der folgende Editor bringt Ihnen einen Artikel G++-Kompilierung und Verwendung unter LinuxStatischThe Die Methode der Bibliothek und der dynamischen Bibliothek ist der Meinung, dass sie ziemlich gut ist, daher werde ich sie jetzt mit Ihnen teilen und darauf verweisen.

In derWindows-UmgebungUnter dem Projekt, wir Normalerweise entwickeln wir C++-Projekte in IDEs wie VS. Wir sind möglicherweise mit der Generierung und Verwendung statischer Bibliotheken (*.lib) und dynamischer Bibliotheken (*.dll) vertraut Ein weiterer Satz von Modi. Die entsprechenden statischen Bibliotheken (*.a) und dynamischen Bibliotheken (*.so) werden auf unterschiedliche Weise generiert und verwendet. Sie sind möglicherweise zunächst nicht damit vertraut, sollten sie jedoch häufiger verwenden Ich bin an diese Art der Verwendung gewöhnt, da die Schritte nicht so kompliziert sind wie die Konfiguration unter VS

Das Folgende ist eine Zusammenfassung, wie statische Bibliotheken und dynamische Bibliotheken unter Linux generiert und verwendet werden: (Da es so ist ein C++-Projekt, also verwendet der Compiler g++, aber es ist dasselbe wie die Verwendung von gcc)

Zunächst besteht die Vorbereitungsarbeit darin, das zu kapseln Funktionen, die wir in eine Bibliotheksdatei packen müssen. Die Header-Datei und die Quelldatei werden wie folgt geschrieben:

//myAPI.h 
int ADD(int a, int b); 
int MINUS(int a, int b);
//myAPI.cpp 
#include "myAPI.h" 
 
int ADD(int a, int b){ 
  return a + b; 
} 
 
int MINUS(int a, int b){ 
  return a - b; 
}

Als nächstes bereiten Sie eine Hauptfunktionsquelldatei zum Testen vor:

//main.cpp 
#include "myAPI.h" 
#include <iostream> 
 
int main(){ 
  std::cout << "1 + 1 = " << ADD(1, 1) << std::endl; 
  std::cout << "1 - 1 = " << MINUS(1, 1) << std::endl; 
  return 0; 
}

Abschließend kompilieren Sie unsere Die myAPI.cpp-Datei generiert die myAPI.o-Zieldatei

g++ -c myAPI.cpp

1. Generieren Sie eine statische Bibliothek und verwenden Sie

zum Generieren einer statischen Bibliothek unter Linux Der Befehl ar verarbeitet die Datei myAPI.o, um eine statische Bibliotheksdatei zu generieren. Die generierte Bibliotheksdatei sollte den Spezifikationen entsprechen, und der Bibliotheksdatei unter Linux sollte das Präfix „ vorangestellt werden. lib". Daher kann für dieses Beispiel die statische Bibliothek libmyAPI.a mit dem folgenden Befehl generiert werden:

ar crv libmyAPI.a myAPI.o

Als Nächstes können Sie die statische Bibliothek während des Projektkompilierungsprozesses verwenden. Zu diesem Zeitpunkt: Die Definitionsdatei der Bibliotheksfunktion myAPI.cpp wird nicht mehr benötigt. Der Kompilierungsbefehl main.cpp lautet wie folgt (beachten Sie, dass die Abhängigkeiten wie folgt sind. Statische Bibliotheksdateien sollten nach den Abhängigkeiten platziert werden):

g++ main.cpp libmyAPI.a -o output

Nachdem die Kompilierung abgeschlossen ist, kann die Ausgabe der ausführbaren Datei ausgeführt werden. Zu diesem Zeitpunkt wird libmyAPI.a nicht mehr benötigt, um den Befehl auszuführen und die Ergebnisse auszugeben:

./output

2. Generieren Sie eine dynamische Bibliothek und verwenden Sie

zum Übergeben beim Kompilieren unter Linux. Der Parameter -shared kann eine dynamische Bibliothek generieren ( .so)-Datei wie folgt:

g++ -shared -fPIC -o libmyAPI.so myAPI.o

Die generierte dynamische Bibliothek muss während der Kompilierung deklariert werden und muss zur Laufzeit von ihr abhängig sein. Die Deklaration lautet wie folgt:

g++ main.cpp -L. -lmyAPI -o output

. Das Flag „-L.“ teilt G++ mit, dass sich die Funktionsbibliothek im aktuellen Verzeichnis befinden kann. Verwenden Sie das Flag „-lmyAPI“, um dem G++--Treiber--Programm mitzuteilen, dass es auf die -Gemeinschaftsfunktionsbibliothek verweisen soll libmyAPI.so während der Verknüpfungsphase.

Wenn bei der Verwendung der folgende Fehler angezeigt wird, verschieben Sie libmyAPI.so einfach in das Verzeichnis /usr/lib:

./output

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der G++-Kompilierung und Verwendung statischer und dynamischer Bibliotheken unter Linux. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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