Installation von Bibliotheken und Header-Dateien unter Ubuntu Linux für C / C ++ - Entwicklung

13887
Lena Schimmel

Ich muss zugeben, dass ich mich jedes Mal völlig verloren fühle, wenn ich die Abhängigkeiten einiger C- oder C ++ - Codes erfüllen muss. Momentan bin ich auf Ubuntu 9.10 (Karmic Koala), aber ich erinnere mich an das Gefühl der Verlassenheit von Windows.

Ich glaube wirklich, dass ich C, C ++, statische und dynamische Bibliotheken, Header-Dateien und Verknüpfungen sowie den Paketmanager "aptitude" verstehe, aber wenn es um den praktischen Teil geht, habe ich absolut keine Ahnung, was ich tun soll. Selbst wenn ich es irgendwie schaffe, weiß ich nicht wirklich, wie ich dorthin gekommen bin und nichts davon gelernt habe.

Zum Beispiel wollte ich heute Code verwenden, der besagt, dass "glib2, curl und openssl" verwendet wird . Am Ende habe ich das herausgefunden curlund opensslwar bereits installiert, aber ich musste die Installation libcurl3-devüber meinen Paketmanager durchführen, was ebenfalls erforderlich ist (und installiert wird), libcurl4-openssl-devdamit ich mich nicht um OpenSSL kümmern muss. Ich musste diese Paketnamen jedoch aus 67 ähnlich klingenden Alternativen auswählen. Undglib auf der anderen Seite mußte manuell heruntergeladen und gebaut werden, da es kein passendes Paket überhaupt war.

Ich habe einige Stunden gebraucht, um das herauszufinden, und es ist nicht das erste Mal. Meine Frage ist also wirklich:

Wenn ich eine vage Beschreibung der Abhängigkeiten habe:

  • Wie finde ich heraus, welche bereits installiert sind?
  • Wie kann ich herausfinden, welche davon durch die Installation von Paketen erfüllt werden können?
  • Woher weiß ich die genauen Namen dieser Pakete?
  • Wenn ein Paket aus der Quelle erstellt werden muss, wie kann ich sicherstellen, dass ich mich nicht in den endlosen Abhängigkeiten dieser Quelle und den Abhängigkeiten dieser Abhängigkeiten verliere?
  • Ich denke, ich muss auch die Bibliotheken mit meinen Objektdateien verknüpfen. Wenn ein einzelnes Paket mit mehreren statischen Bibliotheksdateien geliefert wird, woher weiß ich (ohne Versuch und Irrtum), welche zu verknüpfen sind?
5
Diese Seite beschäftigt sich mit Programmierung, nicht mit Trauer. Wie wäre es mit einer präziseren Beschreibung eines konkreten Problems? bmargulies vor 14 Jahren 0
Mein anfängliches Gefühl war, dass dies eine marginale Programmierfrage war, aber je mehr ich darüber nachdachte, finde ich nützlich. Für viele Entwickler ist es eine Frustration - wer * wurde * nicht das Kaninchenloch hinuntergestoßen und verbrachte den ganzen Morgen damit, 12 Abhängigkeiten zu erstellen? Ich denke, die Frage hat ein breiteres Publikum, als die meisten zugeben wollen. Duck vor 14 Jahren 1
Dies liest sich als "Wie verwende ich den Paketmanager?" Frage an mich und damit Super User Futter. OTOH Ich kann sehen, wie "heruntergefahren und Abhängigkeiten manuell installiert" werden *? da dies für SO besser geeignet ist, da Sie für jedes und jedes, was Sie benötigen, keine gute Dokumentation erhalten, am Ende die Endung `./config` und die Ausgabe von 'make' lesen und nach der entsprechenden Fehlermeldung im Torrent suchen ... dmckee vor 14 Jahren 0
Das Entwicklungspaket für die glib2-Bibliothek heißt libglib2.0-dev user23307 vor 14 Jahren 0
@ justin: Danke. Ich suchte http://packages.debian.org nach "glib" und dies ergab kein nützliches Ergebnis. Ich wusste nicht, dass ich nach "glib2" suchen musste und dann bekomme ich "glib2.0dev" Lena Schimmel vor 14 Jahren 0
Über die Migration zu SuperUser: Ich bin nicht ganz sicher über die Grenze zwischen Stackoverflow und SuperUser, aber diese Frage bezieht sich auf die Programmierung. Ich weiß, wie man einen Paketmanager verwendet, aber ich habe gefragt, wie er die zum PROGRAMMIEREN benötigten Pakete auflösen kann. Der Unterschied zwischen der Installation des Pakets "curl" und "libcurl4-openssl-dev" ist genau der Unterschied zwischen einem Benutzer und einem Programmierer, und genau darum ging es bei dieser Frage. (Tut mir leid, dass ich Großbuchstaben verwendet habe, aber da ich keine Itallics oder mutigen Kommentare habe, musste ich das tun). Ich denke, ein Benutzer ohne Programmierkenntnisse wird davon nicht profitieren. Lena Schimmel vor 14 Jahren 0
@ bmargulies: Ja, im Allgemeinen ist es eine schlechte Idee, eine Stackoverflow-Frage zu schreiben, wenn sie schlecht gelaunt ist. Ich hätte mir mehr Mühe geben müssen, um die Frage knapper zu gestalten. Trotzdem ist es ein "Schlüsselmerkmal" dieser Frage, nicht zu konkret zu sein. Sie sehen, ich möchte nicht wissen, wie der Paketname für das curl-Entwicklungspaket lautet, da ich bereits herausgefunden habe, dass es "libcurl3-dev" ist. Stattdessen frage ich, wie man das generell herausfinden kann, also weiß ich, was ich tun soll, wenn das nächste Mal das Problem auftritt. Lena Schimmel vor 14 Jahren 0

2 Antworten auf die Frage

3
SoapBox

Herauszufinden, welche Pakete installiert werden müssen, um Abhängigkeiten zu befriedigen, ist keine exakte Wissenschaft. Es gibt jedoch einige Tipps, die Ihnen helfen könnten:

  • Wenn Sie mit befriedigenden Abhängigkeiten arbeiten, um etwas zu kompilieren, möchten Sie fast immer, dass das Paket endet -dev. Dies ist eine Abkürzung für die Entwicklung. Das opensslPaket enthält beispielsweise Befehlszeilentools und Bibliotheken für die Arbeit mit Verschlüsselung. libssl-deventhält Header-Dateien und Bibliotheken für die OpenSL-Entwicklung.
  • Um mit apt nach einem Paket zu suchen, verwenden Sie apt-cache search. Zum Beispiel wusste ich nicht wirklich, dass libssl-dev der Name des openssl dev-Pakets war. Ich fand das mit diesem Befehl: apt-cache search openssl | grep devund dann mit dem Befehl, der nicht mit einer anderen Sprache / Bibliothek in Verbindung zu stehen schien.
  • Sie können sehen, welche Pakete Sie installiert haben dpkg -l, aber im Allgemeinen finden Sie einfach das gewünschte Paket und weisen apt an, es zu installieren. Wenn Sie es bereits installiert haben, werden Sie von apt informiert. Ein weiterer guter Tipp ist, wenn Sie wissen möchten, zu welchem ​​Paket eine Datei gehörtdpkg -S /path/to/thefile
  • Wenn Sie am Ende ein Paket aus der Quelle erstellen müssen, gibt es keine einfache Möglichkeit, den Abhängigkeitsbaum aufzulösen. ./configuresollte dir sagen, oder die README-Datei. Oft wird sogar das genaue Paket angegeben.
  • Um herauszufinden, was Sie verknüpfen möchten, bezieht sich dies normalerweise auf den Namen des Pakets oder den allgemeinsten Namen für das, was Sie möchten. Für unser libssl-Beispiel würden Sie einfach -lsslan gcc übergeben. Wenn Sie nicht wissen, was die Optionen -lsind, werfen Sie einen Blick in / lib / (entfernen Sie einfach die "lib" von vorne und ".so ..." von der Rückseite, um die "Mitte" zu erhalten, die bestanden wird zu gcc).
Die Suchfunktionen des Paketinhalts unter http://packages.debian.org sind ebenfalls eine großartige Ressource. vor 14 Jahren 2
füge ein paar Infos über "apt-file search foo.h" hinzu ... http://debianhelp.de/apt-file.html, ansonsten ist deine Antwort ziemlich vollständig akira vor 14 Jahren 2
@akira: apt-file scheint ziemlich cool zu sein. Das wusste ich vorher nicht, vielen Dank. Du hättest dies zu einer separaten Antwort machen sollen, du hättest eine positive Meinung von mir;) Lena Schimmel vor 14 Jahren 1
2
malte

Niemand hat erwähnt

aptitude build-dep 

Der Manpage-Eintrag ist ziemlich umfassend.