Guybrush Threepwood Geschrieben 25. April 2004 Geschrieben 25. April 2004 Hab noch folgende Texte aus der alten FAQ in meinen privaten Nachrichten gefunden: Was sind Header? Funktionen und Datentypen werden in Headerdateien (*.h) deklariert. Diese Headerdateien müssen per #include <dateiname> oder #include "dateiname" in alle Quellcodedateien eingebunden werden, die Zugriff auf diese Funktionen benötigen. Wird dies nicht gemacht, tritt bei unbekannten Datentypen Fehlermeldungen der Art "Fehlende Speicherklasse oder Typbezeichner" und bei unbekannten Funktionen "nichtdeklarierter Bezeichner" auf. Was sind Libraries? Zusätzlich zu den Headerdateien werden oft noch statische Libraries (Bibliotheken) benötigt (*.lib, *.a), die entweder selbst die Funktionsdefinitionen enthalten oder auf dynamische Bibliotheken (*.dll, *.so) verweisen. Diese Libraries müssen dem Linker angegeben werden, sonst tritt eine Fehlermeldung der Art: "unaufgeloester externer Verweis" auf. C-Strings: Strings werden in C als Array von Charactern angelegt: char szString[10]; liefert einen String mit 10 (Index 0-9) Zeichen. Für die meisten Funktionen muss jeder String mit einem '\0' als letztes Zeichen abgeschlossen werden. Dies geschieht bei den meisten Funktionen automatisch. Nur wenn man die Zeichen selber festlegt sollte man daran denken, da sonst Speicherüberläufe stattfinden können. Strings können nicht über den == Operator miteinanderverglichen werden, da so nur ihre Startadressen verglichen werden. Um solche Vergleiche durchzuführen gibt es verschiedene Funktionen, z.B. strcmp(), die in einer C Refernez oder hier auf dem Board nachgelesen werden können. Zitieren
nic_power Geschrieben 25. April 2004 Geschrieben 25. April 2004 Hallo, Original geschrieben von Guybrush Threepwood Was sind Libraries? Zusätzlich zu den Headerdateien werden oft noch statische Libraries (Bibliotheken) benötigt (*.lib, *.a), die entweder selbst die Funktionsdefinitionen enthalten oder auf dynamische Bibliotheken (*.dll, *.so) verweisen. Das stimmt so nicht oder ist zumindest unglücklich formuliert: Dynamische Libraries werden direkt mit den Objekt-Dateien zu einer ausführbaren Datei gelinkt und nicht über eine statische Bibliothek als Umweg. Das Nachladen der entsprechenden Funktionen aus den Shared-Libraries wird dann zur Laufzeit durch den dynamischen Linker/Loader durchgeführt. Ob dynamisch oder statisch gelinkt wird, läßt sich durch Compiler/Linker Switches beeinflussen. Nic Zitieren
Guybrush Threepwood Geschrieben 25. April 2004 Autor Geschrieben 25. April 2004 Heißt das jetzt einfach nur das die dynamische Bibliothek zum Linken nicht benötigt wird, was ja IMHO so ist und wirlich etwas unglücklich ausgedrückt ist? Oder das, wenn ich mit einer statischen Bibliothek linke, ich die dynamische überhaupt nicht mehr benötige? Zitieren
nic_power Geschrieben 25. April 2004 Geschrieben 25. April 2004 Hallo, Du linkst entweder mit einer dynamischen oder mit einer statischen Bibliothek. Auch die dynamische Bibliothek wird vom Linker beim Linken benötigt. Nic Zitieren
Guybrush Threepwood Geschrieben 25. April 2004 Autor Geschrieben 25. April 2004 Das verstehe ich jetzt nicht so richtig. Mal angenommen ich erstelle mir unter Windows eine DLL die eine Funktion exportiert. Wenn ich diese Linke bekomme ich die .dll und die .lib. Danach erstelle ich mir ein Programm welches die Funktion per __declspec(dllimport) importiert. Dann muss ich dem Linker beim erstellen der Anwendung die .lib Datei angeben. Nach dem Erstellen benötigt die Exe aber die DLL. Die andere mir bekannte Möglichkeit ist die Funktion zur Laufzeit der Exe aus der DLL zu laden, dann benötige ich die .lib nicht zum linken. D.H. doch das ich entweder die .lib und die .dll oder nur die .dll brauche. Zitieren
nic_power Geschrieben 25. April 2004 Geschrieben 25. April 2004 Hallo, das ist in höchsten Maße Plattform und implementierungsabhängig. Bei allen Unixoiden Betriebssystemen sind nur die Shared Libraries notwendig gegen die die Binaries direkt gelinkt werden. Dies ist die grundlegende Idee hinter einer Shared Library. Bei der von dir angesprochene Methode greifst Du direkt auf die Shared Lib zu. Dieses Verfahren findet beispielsweise bei der Einbindung von Plugins in ein Programm Anwendung. Beim Linken von Programmen ist es für den Programmierer transparent, ob nun statisch oder shared gelinkt wird. Ein zusätzliches Handling der Shared Libraries innerhalb des Programms ist hier nicht notwendig (wie gelinkt wird, läßt sich beispielsweise über die Angabe von Flags der art "-static" oder "-shared" beeinflussen). Nic Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.