Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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

Geschrieben

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?

Geschrieben

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.

Geschrieben

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

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...