Forum: PC-Programmierung *.dll vs *.obj


von Thomas (Gast)


Lesenswert?

Hallo Gemeinde.

Meine Umgebung: MS Visual C++ 2010 Express Edition

Kann mir jemand kurz und prägnant den Unterschied zwischen einer DLL- 
und einer OBJ-Datei erläutern?

Hintergrund: Kann ich in meinem Project gegen eine OBJ-Datei linken? 
Wenn ja, wie funktioniert dies? Brauche ich hierfür die entsprechende 
Header-Datei?

Vielen herzlichen Dank.
            Thomas

von Udo S. (urschmitt)


Lesenswert?

Eine .obj ist eine übersetzte c Datei.
Eine dll ist ähnlich einer .lib, also eine Sammlung von .obj Dateien.
Nur muss eine .dll nicht fix zu einem Programm dazugelinkt werden 
sondern wird erst zum Programmstart vom Betriebssystem 'dazugeholt'
Damit das funktioniert wird beim Linken eine sogenannte 'Import Library' 
zum Programm gelinkt. Darin steht quasi welche Funktionen dann in der 
.dll zu suchen sind.

von Karl H. (kbuchegg)


Lesenswert?

Thomas schrieb:
> Hallo Gemeinde.
>
> Meine Umgebung: MS Visual C++ 2010 Express Edition
>
> Kann mir jemand kurz und prägnant den Unterschied zwischen einer DLL-
> und einer OBJ-Datei erläutern?


OBJ-File

      entsteht aus einem Source Code File und enthält bereits
      Maschinencode, so wie er vom Prozessor ausgeführt werden
      kann

eine Library

      eine Sammlung von OBJ-Dateien, so dass der Inhalt von mehreren
      OBJ-Dateien in eine gemeinsame Library zusammengeführt wird.
      Der Name sagt es schon "Bibliothek". Und so wie es in einer
      Bibliothek einen Haufen Bücher gibt, aus denen sich der Leser
      die für sich interessanten heraussucht, so sucht sich der Linker
      beim Zusammenbau eines Programms aus der Library die Funktionen
      die er für das vollständige Programm benötigt.

eine DLL

      eine spezielle Form einer Library, die so aufgebaut ist, dass
      ihr Inhalt erst zur Laufzeit des Programmes zum Programm
      'hinzugefügt' wird.
      Wie dieses hinzufügen genau passiert ist per se nicht festgelegt.
      Das kann in wortwörtlicher Form passieren, in dem die DLL
      beim Laden des Programmes in den Speicherraum des Programmes
      mitgeladen wird. Das kann aber auch ein anderer Mechanismus sein,
      bei dem die Funktionen in der DLL über andere Mechanismen vom
      Programm aus verwendbar sind.


> Hintergrund: Kann ich in meinem Project gegen eine OBJ-Datei linken?

Ja, natürlich. Das ist sogar der Normalfall.

> Wenn ja, wie funktioniert dies? Brauche ich hierfür die entsprechende
> Header-Datei?

Irgendwie muss deinem Source Code bekannt gemacht werden, welche 
Funktionen es gibt und wie sie aufzurufen sind. In welcher Form das dann 
auch immer passiert. Für C oder C++ ist die übliche Form ein Header 
File.

von Thomas (Gast)


Lesenswert?

Vielen Dank für sehr gute Beantwortung meiner Frage(n).

Hier ist gleich noch eine zu diesem Thema:
Wenn eine *.lib nun eine Art Container für *.obj-Dateien ist, wie kann 
ich dann mehrere bereits existierende Object-Datein zu einer einzelnen 
Library "bündeln"?
(am besten am Beispiel der MSVC++ 2010 Express Edition)

Vielen herzlichen Dank nochmal.
          Thomas

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Thomas schrieb:
> Wenn eine *.lib nun eine Art Container für *.obj-Dateien ist, wie kann
> ich dann mehrere bereits existierende Object-Datein zu einer einzelnen
> Library "bündeln"?

Dafür gibt es den Projekttyp "Library". Da packt man dann zwar nicht 
bereits existierende Objektdateien hinein, sondern die jeweiligen 
Quelltexte, aber das Endprodukt ist genau das, was Du willst.

von Thomas (Gast)


Lesenswert?

Ich habe allerdings keine Quelltexte (*.CPP) vorliegen, sondern nur die 
erzeugten OBJ-Dateien und deren Header-Dateien (Prototypen).

Es sind insgesamt etwa 250 OBJ-Dateien, diese würde ich ganz gerne in 
eine einzelne LIB-Datei packen - der Handhabung wegen.

Geht das unter MSVC mit dem Tool "LIB"?

Vielen Dank.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn die Objektdateien alle mit kompatiblen Einstellungen erzeugt 
wurden, und auch im richtigen Dateiformat vorliegen (also mit einem 
MS-Compiler erzeugt wurden), dann sollte lib tatsächlich das Tool der 
Wahl sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.