Wo speichert Ubuntu seine Bibliotheksdateien?


17

Ich möchte meine eigene Bibliothek für die Kompilierung in c hinzufügen, weiß aber nicht, wo Ubuntu sie speichert.


5
Es speichert in / usr / lib & / usr / include
karthick87

Ich habe festgestellt, dass meine Bibliothek in / usr / include enthalten ist. Wie soll ich damit umgehen, dass ich sie einfüge? Soll ich nur eine Header-Datei und eine AC-Datei in die Nähe legen oder soll ich den Header und die Funktion zusammen in eine .h-Datei schreiben?
David25

3
Bibliotheken und Header sind verschiedene Dinge, / usr / include enthält KEINE Bibliotheken, sondern Header, die Definitionen von Funktionen / Objekten sind, die in Bibliotheken verfügbar sind. Die Frage sollte verbessert werden, es ist schwer zu verstehen, was Sie erreichen wollen.
João Pinto

Antworten:


11

Ausgehend von Ihren Kommentaren zu Ihrer Frage, denke ich, was Sie wirklich fragen, ist: "Wie installiere ich eine benutzerdefinierte Bibliothek, die ich geschrieben habe, und wo soll ich sie ablegen?"

Im Allgemeinen werden Dinge, die lokal für andere Benutzer auf dem Computer erstellt wurden, in den Baum / usr / local gestellt. Die Header-Datei sollte sich in / usr / local / include befinden. Die kompilierte Bibliothek sollte sich in / usr / local / lib befinden. Die .c-Datei ist nicht Teil der Bibliothek, sie ist Teil der Quelle und normalerweise nicht für den Endbenutzer installiert. Sie benötigen Root-Zugriff, um Dateien an einem dieser Speicherorte abzulegen.

Um die Bibliothek zu erstellen, müssen Sie zunächst entscheiden, ob Sie eine statische oder dynamische (gemeinsam genutzte) Bibliothek möchten. Weitere Informationen zum Erstellen einer gemeinsam genutzten Bibliothek finden Sie in Abschnitt 3.4, Erstellen einer gemeinsam genutzten Bibliothek unter http://www.linux.org/docs/ldp/howto/Program-Library-HOWTO/shared-libraries.html . (Sie haben auch Empfehlungen, wo man Sachen ablegt - die meisten Entwickler werden eine oder drei Meinungen haben :-))


11

Je nach Bibliothek speichert Ubuntu seine Bibliotheken hauptsächlich an drei Orten

  1. / lib
  2. / usr / lib
  3. / usr / local / lib

Das Folgende ist vom Dateisystem-Hierarchie-Standard

/ lib

Das Verzeichnis / lib enthält die gemeinsam genutzten Bibliotheksimages, die zum Booten des Systems und Ausführen der Befehle im Root-Dateisystem erforderlich sind, d. H. durch Binärdateien in / bin und / sbin.

/ usr / lib

/ usr / lib enthält Objektdateien, Bibliotheken und interne Binärdateien, die nicht direkt von Benutzern oder Shell-Skripten ausgeführt werden sollen. [22]

Anwendungen können ein einzelnes Unterverzeichnis unter / usr / lib verwenden. Wenn eine Anwendung ein Unterverzeichnis verwendet, müssen alle architekturabhängigen Daten, die ausschließlich von der Anwendung verwendet werden, in diesem Unterverzeichnis abgelegt werden.

/ usr / local / lib enthält lokale Bibliotheken, dh eine für dieses System spezifische, aber ich kann in FHS keine Verweise auf / usr / local / lib finden, sie enthalten nur Erklärungen für / usr / local.



0

Sie sollten dem Compiler mitteilen, wo er Ihre Bibliothek finden kann. Angenommen, der Pfad zu Ihrer Bibliothek lautet "/path/to/lib/libfoo.a". Sie könnten Ihr Programm "hello.c" folgendermaßen kompilieren und verknüpfen:

gcc -L/path/to/lib -lfoo hello.c

Dies ist nicht Ubuntu-spezifisch, tatsächlich unterstützen alle mir bekannten C-Compiler diese Flags.


-2

In Ubuntu findet man sie in /usr/include.


1
Header- Dateien sind in/usr/include. Die eigentlichen Binärdateien für eine Bibliothek werden dort nicht gespeichert. Header können als Teil einer Bibliothek betrachtet werden, müssen jedoch separat installiert werden und werden zum Kompilieren von Programmen verwendet, die eine Bibliothek verwenden. Sobald ein Programm kompiliert wurde, das eine Bibliothek verwendet, benötigt oder verwendet es die Header-Dateien nicht mehr.
Eliah Kagan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.