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
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.
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.
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
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.