Datum:
9. April 2025 12:25
Alle Einstellungen können mit Debug oder Release gemacht werden. z.B. normal builden mit Debug, shared library mit Release...
Projekt definieren: Static Library (statische Bibliothek)
- Filename (Linux): libXxx.a
- Einbindung: Die Static Library wird zur Kompilierzeit in die ausführbare Datei integriert. Alle Funktionen und Daten aus der Bibliothek werden in die endgültige Binärdatei eingebaut.
- Speicher: Jede ausführbare Datei enthält eine eigene Kopie der statischen Bibliothek, was zu grösseren Dateien führt.
- Vorteile: Das Programm benötigt keine externen Bibliotheken zur Laufzeit. Alles ist bereits in die ausführbare Datei integriert. Da alles in einer Datei enthalten ist, gibt es keine Probleme mit fehlenden Bibliotheken auf anderen Systemen.
- Nachteile: Die ausführbare Datei ist grösser, da sie den gesamten Code der Bibliothek enthält. Wenn sich die Bibliothek ändert, muss das Programm neu kompiliert werden.
- Einstellungen / Settings:
- Project → Properties → "C/C++ Build" → Settings → "Build Artifact": (-o)
- Artifact Type: Static Library
- Artifact name: name der library, ohne lib, ohne .a
- Project → Properties → "C/C++ Build" → Settings → "Tools Settings" → "GCC C++ Compiler" → Miscellaneous:
- Position Independent Code (-fPIC): aktivieren, bei Compiler-Errors
Projekt definieren: Shared Library (dynamische Bibliothek)
- Filename (Linux): libXxx.so
- Einbindung: Die Shared Library wird zur Laufzeit geladen und verwendet. Das bedeutet, dass die ausführbare Datei einen Verweis auf die .so-Datei enthält, aber die eigentliche Library wird erst bei der Ausführung des Programms benötigt.
- Speicher: Mehrere Programme können dieselbe Shared Library im Speicher teilen, was Speicherplatz spart, da nur eine Kopie der Bibliothek geladen wird.
- Vorteile: Die ausführbare Datei ist kleiner, da sie die Funktionen nicht direkt enthält. Bibliotheken können aktualisiert werden, ohne dass das Programm neu kompiliert werden muss, solange die API gleich bleibt.
- Nachteile: Das Programm benötigt die Shared Library zur Laufzeit. Wenn die Bibliothek nicht gefunden wird, tritt ein Fehler auf. Wenn sich die Schnittstelle (API) der Bibliothek ändert, können Inkompatibilitäten entstehen.
- Einstellungen / Settings:
- Project → Properties → "C/C++ Build" → Settings → "Build Artifact": (-o)
- Artifact Type: Shared Library
- Artifact name: name der library, ohne lib, ohne .so
- Project → Properties → "C/C++ Build" → Settings → "Tools Settings" → "GCC C++ Linker" → "Shared Library Settings":
- Shared (-shared): aktivieren, um Projekt in eine "Shared Library" zu erstellen
- Project → Properties → "C/C++ Build" → Settings → "Tools Settings" → "GCC C++ Compiler" → Miscellaneous:
- Position Independent Code (-fPIC): aktivieren, bei Compiler-Errors
Library (in anderem Projekt) einbinden
- Project → Properties → "C/C++ Build" → Settings → "Tools Settings" → "GCC C++ Linker" → Libraries:
- Libraries (-l): Name der externen library, ohne lib, ohne .a oder .so
- Library search path (-L): Folder der oben angegebenen libs, e.g.
"${workspace_loc:/XXX/Release}" - CPP code include:
#include "../../XXX/src/Xxx.h"
- (optional) Project → Properties → "C/C++ Build" → Settings → "Tools Settings" → "GCC C++ Compiler" → Includes:
- Include paths (-l): Source Folders hinzufügen, e.g.
"${workspace_loc:/XXX/src}" - CPP code include:
#include <Xxx.h>
- (optional) Project → Properties → "Project References":
- Project references for 'xxx': zu referenzierende Projekte aktivieren