Welchen Nutzen haben Entwicklungspakete wie “libgtk+-devel” oder “python-devel” usw.? Enthalten sie Quelle der Bibliothek? Wie unterscheidet es sich von Nicht-Entwicklungspaketen wie libgtk+?
Was sind *-devel-Pakete?
Varianz
Joachim Sauer
Das *-devel
Pakete (normalerweise als *-dev
in Debian-basierten Distributionen) sind normalerweise alle Dateien, die zum Kompilieren von Code für eine bestimmte Bibliothek erforderlich sind.
Zum Ausführen einer Anwendung unter Verwendung der Bibliothek libfoo
nur die tatsächlich gemeinsam genutzte Bibliotheksdatei (*.so.*
zum Beispiel libfoo.so.1.0
) werden benötigt (plus möglicherweise einige Datendateien und einige versionspezifische symbolische Links).
Wenn Sie tatsächlich eine C-Anwendung kompilieren möchten, die diese Bibliothek verwendet, benötigen Sie die Header-Dateien (*.h
zum Beispiel foo.h
), die die Schnittstelle dieser Anwendung beschreiben, sowie einen versionlosen symbolischen Link zur gemeinsam genutzten Bibliothek (*.so
zum Beispiel libfoo.so
-> libfoo.so.1.0
). Diese sind normalerweise in der gebündelt *-devel
Pakete.
Manchmal die *-devel
Pakete enthalten auch statisch kompilierte Versionen der Bibliotheken (*.a
zum Beispiel libfoo.a
) für den Fall, dass Sie eine vollständige eigenständige Anwendung erstellen möchten, die überhaupt nicht von dynamischen Bibliotheken abhängt.
Andere Sprachen (wie Java, Python, …) verwenden eine andere Art, die API einer Bibliothek zu notieren (effektiv einschließlich aller notwendigen Informationen in der eigentlichen Bibliothek) und benötigen daher normalerweise keine separate *-devel
Pakete (außer vielleicht für Dokumentation und zusätzliche Tools).
-
Fast. das
.so
Datei befindet sich im Paket -devel; die normale gemeinsam genutzte Bibliothek geht vorbei.so.*
, da es einen SONAME enthält. Das.so
Datei wird vom Linker verwendet, und die.so.*
Bibliothek wird zur Laufzeit verwendet.– Ignacio Vazquez-Abrams
2. März 2010 um 4:48 Uhr
-
Sie benötigen also im Grunde die * Entwicklungsbibliotheken der betreffenden Anwendung, wenn es sich um eine Abhängigkeit von einer anderen Anwendung handelt, da Sie die Schnittstelle verfügbar machen müssen?
– Oh
31. Juli 2018 um 9:54 Uhr
-
@ohhh: nein. Sie benötigen diese Pakete nur, wenn Sie kompilieren etwas, das diese Bibliothek braucht. Wenn ein Paket Verwendet Diese Bibliothek brauchen Sie dann nicht
-devel
Paket. Mit anderen Worten: Die meisten normalen Benutzer werden das nie brauchen-devel
Paket, aber Entwickler könnten.– Joachim Sauer
26. Juli 2021 um 8:53 Uhr
Sie enthalten normalerweise notwendige Header und Bibliotheken. Beispielsweise stellt python-devel die Python-Header und -Bibliotheken bereit, die Sie benötigen, wenn Sie den Python-Interpreter in Ihre eigene Anwendung einbetten möchten. Einige zusätzliche Tools und Dokumentationen sind ebenfalls enthalten (z. B. ein Entwicklerhandbuch oder Codebeispiele).
-
Sind Tools wie pyinstaller ein Beispiel dafür? Da AFAIK-Freezer auch einen Python-Interpreter in das von ihnen erstellte Bundle einbetten, haben Sie genau das hier gesagt.
– aderchox
7. August 2020 um 19:32 Uhr
Es lohnt sich nicht, eine weitere Antwort zu öffnen, aber zusätzlich zu den vorhandenen Antworten sollte ich betonen, dass Paketierer versuchen, ein Nicht-Entwicklungspaket wie z
libgtk+
der minimale Footprint, der zum Ausführen (im Gegensatz zum „Entwickeln“) von gtk+-Programmen erforderlich ist. Das bedeutet nur dynamische Bibliotheken und Konfigurationsdateien. Alles andere geht in die Ergänzung-devel
Paket.– Pascal Cuoq
2. März 2010 um 4:33 Uhr