Anfängerfrage bez. verlinkung
-
Hallo ich möchte ein wenig mit NMM programmieren. Als blutiger anfänger tauchen natürlich fragen zu externen Bibliotheken auf.
1. Die Header Dateien bin ich so ein #include "/nmm/base/datei.h"?
2. Beim Compalieren vervollständige ich den absoluten Pfad mit
gcc -I /home/copper/nmm/include? Auf diese Weise ist dem Linker der gesamte Pfad zu der *.h datei bekannt?
3. Muss extra noch mit -L der Pfad zu den Libs angegeben werden?
3b. Wenn ja wieso?
Nun kann das programm mit den Dateien der Libary arbeiten.
4. Und wichtigste frage: Was ist wenn ich die Dateien von NMM verschiebe?
Funzt dann das Progg nichtmehr?Thx für die Antworten
-
1. Die Header Dateien bin ich so ein #include "/nmm/base/datei.h"?
/ am Anfang zeigt einen absoluten Pfad an, du willst aber sicher einen relativen. Also binde nur nmm/base/datei.h ein.
2. Beim Compalieren vervollständige ich den absoluten Pfad mit
gcc -I /home/copper/nmm/include? Auf diese Weise ist dem Linker der gesamte Pfad zu der *.h datei bekannt?Ne, den Linker interessieren Headerdateien nicht. Der linker kombiniert nur Libraries und Objektdateien zu einem Binary. #include macht der Precompiler
3. Muss extra noch mit -L der Pfad zu den Libs angegeben werden?
3b. Wenn ja wieso?Weil Header und Library etwas unterschiedliches sind. Libraries enthalten den Binärcode (enden mit .a oder .so oä), Headerdateien enthalten deklarationen oder inline Methoden als C Code (oder sind zwischencompiliert, aber das ist erst mal unwichtig).
Das eine interessiert den Precompiler, das andere den Linker. Du musst sogar explizit mit -l die zu linkende Library angeben (den Teil zwischen lib und der Endung, zB. foo bei libfoo.so)
4. Und wichtigste frage: Was ist wenn ich die Dateien von NMM verschiebe?
Funzt dann das Progg nichtmehr?Header Dateien und statische Libraries werden eh fest in das Binary eingebunden, daher ist das egal. Bei dynamischen Libraries ist es wichtig, dass diese in einem der Verzeichnisse liegen, die automatisch nach dynamischen Libraries durchsucht werden oder auf die mit der Umgebungsvariable LD_LIBRARY_PATH verwiesen wird.
Schau dich am besten ein wenig im gcc Handbuch um und mach dir bewußt, dass eine Library etwas anderes ist als eine Header-Datei.
-
Die Middleware NMM mit der ich harbeiten möchte benötigt viele exterene Bibliotheken.
Ich habe nun schomn mit wenigen Libs eine Grundfunktionalität erreicht. Möchte jetzt aber noch mehr funtktionen.
Nach dem ich die neue Lib inst. habe muss ja auch NMM neu gebaut werden.
Das bauen dauert baer jedesmal ca. 2h (ist sehr umfangreich das ganze)
Wie kann ich es mir ersparen jedesmal alles neu zu bauen.Indem ich das make clean nach dem make install weglassen?
Muss unbedingt ein make clean gemacht werden?thx für die Antwort