Wie nutzen Sie die Bibliothek mit Kopf-und .also Dateien?
Ich bin neu in C und wollte eine Bibliothek (MLT Multimedia-Framework)
Habe ich es eingebaut, und es ergeben sich folgende Verzeichnisse: include
lib
share
Innen lib
es gibt .so
.a
.la
Dateien
Innerhalb include
es gibt .h
Dateien
Nun, ich bin beauftragt, dies zu tun:
#include <framework/mlt.h>
innerhalb include/mlt/framework/
Fragen:
- Warum ich die benötige ich für die header-Datei, enthält die Funktion nur Prototypen? Wo sind die wirklichen Funktionen dann? Sie verknüpft irgendwie die enthalten sind in
lib
Verzeichnis? - Wo meine eigenen Dateien und , wie um es zu kompilieren?
- Wie erfahren Sie mehr über die Themen:
- Dynamische/Statische Bibliotheken
- Bauen /machen /installieren
- Wie zu verwenden jede C-Bibliothek
- Geben spezifische Anleitungen: Welche IDE/compiler/etc. Sie über? Reine GCC? Einige grafische IDE? Makefiles?
- Was ist der Bezug zu C++? Verwendung von C++ - Bibliotheken in C ist zwischen schwierig und unmöglich.
- Da in C++ haben die Verwendung von C-Bibliotheken.
- Nein, @Hi-Engel. Was macht Sie so denken? Auch nicht, wenn Sie mit C libs von C++, das würde nicht bedeuten, in die andere Richtung.
- C++ libs sind möglich (aber nicht sehr kompatibel zu anderen Plattformen/toolchains/etc). Und UlrichEckhardt meinst etwas anderes an Erster Stelle: Sie benutzen kann C++ libs in C
- gut, weil jeder Bibliothek, die man zu verwenden, die in C oder C++ haben keine entstellte, und daher C? ☺
- Ich sah, aber Sie fragten, was ist der Bezug zu C++, so dass man zu beantworten haben, ist, dass zumindest die Umgekehrt etwas möglich ist.
- Vielleicht sollte ich klarer sein: Warum ist dieser stackoverflow-Frage einen C++ - tag? Ausgehend von den Inhalten des Textes, es sollte nicht sein. Da ich mich nicht auszuschließen, dass noch nicht offenbart Bezug auf die Frage, die ich fragte, was die "Beziehung zu C++" ist.
- Sie haben die gleiche relation zu C++ als an C. es wäre Also absolut gleich Fragen «Was haben diese zu tun mit C++» und «Was haben diese zu tun mit " C».
- OP erwähnt, dass es eine C-lib. und dass er/Sie ist neu in C (dh. anscheinend ist das ganze Programm ist in C). Thats, warum die C++ - tag, ist fraglich.
- ah, gut, vielleicht ist es... Es ist nur so, dass die Fragen, die Sie markiert mit Aufzählungszeichen müssen die gleichen Antworten für C und C++.
- by the way, anstelle von «er/Sie» kann man sagen «Sie». Es ist völlig in Ordnung zu finden, eine einzige person mit dem Pronomen.
- Sorry für die Erbsenzählerei, aber es gibt Unterschiede. ZB
extern "C" {}
etc.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht die Funktion haben, Prototypen, wie würde der compiler wissen, was für Funktionen gibt es in der Bibliothek? Die kurze Antwort ist: Es funktioniert nicht. Längere Antwort: Der compiler kümmert sich nicht darum, Bibliothek-Dateien, statische (Dateien mit der Endung
.a
) oder shared (Dateien mit der Endung.so
), alle, die es interessiert, ist die aktuelle translation unit. Es ist bis zu den linker Griff lösen Undefinierte Referenzen.Wenn Sie Bibliotheken verwenden, geben Sie die header-Dateien enthalten, die benötigt Erklärungen (Strukturen, Klassen, Typen -, Funktions-Prototypen) in der source-Datei. Die source-Datei sowie alle inkludierten header-Dateien bildet die übersetzung Einheit, die der compiler verwendet, um code zu generieren. Wenn es Undefinierte Referenzen (zum Beispiel den Aufruf einer Funktion in der Bibliothek) fügt der compiler spezielle Informationen über das zu der erzeugten Objekt-Datei. Der linker sucht dann durch alle Objekt-Dateien und wenn Sie findet, einen nicht aufgelösten Verweis versucht es zu finden, in anderen Objekt-Dateien und Bibliotheken zur Verfügung gestellt. Wenn alle Definitionen sind gelöst, der linker generiert den endgültigen ausführbaren Datei, ansonsten wird der Bericht der ungelösten Definitionen als Fehler.
Beantworten Ihre anderen Fragen:
Diese zwei Fragen, die Antwort auf die erste (über die Platzierung Ihrer Dateien) ist, dass es eigentlich egal ist. Für kleines Projekt mit nur ein paar source-und header-Dateien, ist es üblich, um alle Dateien in einem gemeinsamen Projekt-Verzeichnis.
Die zweite Frage, über die Erhebung, gibt es verschiedene Möglichkeiten, es zu tun. Wenn es nur einen oder zwei Quell-Dateien können Sie mit der compiler-frontend (z.B.
gcc
) zu kompilieren und link und generieren Sie die ausführbare Datei in einem Arbeitsgang:Den obigen Befehl nimmt zwei Quellcode-Dateien, kompiliert und verlinkt diese in das Programm
your_program_name
.Wenn Sie brauchen, um eine Bibliothek, es gibt ein oder zwei Dinge, die Sie hinzufügen müssen, um die obige Befehlszeile:
Erzählt man dem linker zur Verknüpfung mit der Bibliothek, dies geschieht z.B. mit dem
-l
(der Kleinbuchstabe L) option:Es ist wichtig zu beachten, dass
the_library
ist der Basis-name der Bibliothek. Wenn Sie die Bibliothek-Datei ist benanntlibthe_library.so
dann nurthe_library
Teil erforderlich ist, kann der linker fügt die anderen Teile automatisch.Wenn die Bibliothek nicht im standard-Speicherort, dann müssen Sie dem compiler und dem linker, wo die Bibliothek-Datei. Dies geschieht mit der
-I
(Kapital i) Möglichkeit zu sagen, die Präprozessor, wo die header-Dateien sind, und die-L
(Kapital l), wo der linker Dateien sind.Etwas wie
Wenn du mehr als ein paar von source-Dateien, ist es üblich, so genannte makefiles, in der alle Quell-Dateien, Abhängigkeiten, der compiler-und linker-flags, und enthalten Vorschriften darüber, wie zu bauen, Objekt-Dateien und link das endgültige Programm. Wie ein makefile Aussehen könnte
Dem obigen makefile tun sollten, nur etwa die gleiche wie der Vorherige Befehl Linie. Der große Unterschied ist, dass es viel einfacher, um mehrere Quell-Dateien, fügen Sie spezielle Regeln für spezielle Dateien, und die meisten wichtiger ist, die
make
Programm Abhängigkeiten zu behandeln, so dass, wenn eine Datei sich nicht geändert seit dem letzten build, dann wird es nicht kompiliert werden. Das Letzte bit wird großen Projekten mit vielen source-Dateien, die bauen sehr viel schneller, wenn nur einer oder mehrere der Quelldateien geändert wurde.Gehen Sie zu Ihrer bevorzugten Suchmaschine und suchen für diese Themen gibt. Ich empfehle auch z.B. Wikipedia.
Natürlich, wenn Sie eine (Integrated Development Environment ein.k.ein. eine IDE) dann musst du nicht kompilieren von der Befehlszeile aus, oder machen Sie Ihre eigenen makefiles, wird die IDE handle alles für Sie. Es wird auch Dialoge für die Projekteinstellungen, wo Sie eingeben können, gehören die Wege-und Bibliothek-Pfade, und was Bibliotheken zu verknüpfen mit.
So zu befriedigen Ihrer-compiler für die Erklärung dieser Funktionen oder die Deklaration von Klassen. Als C++ ist die statische Typprüfung Sprache, müssen Sie wissen, die Art der Objekte, die Sie verwenden werden.
Können Sie platzieren Sie den code irgendwo in Ihr Dateisystem; nur stellen Sie sicher,.h-Dateien im includes path und lib beim kompilieren. In der Regel müssen Sie zum ändern der Pfad.
Können Sie überprüfen, über Gebäude auf diesen link:
https://en.wikipedia.org/wiki/GNU_build_system
Überprüfen Sie die
README
- Datei, kam mit dem code. Es sollte Ihnen sagen, wie es zu installieren in das system korrekt. In der Regel gibt es eineinstall
target build installiert die erzeugten Dateien in die richtigen Verzeichnisse.Die übliche Reihenfolge der Befehle zum erstellen und installieren den meisten Produkten ist: