Libs: Wird EXE größer?
-
Mhm, da muß ich doch glatt zugeben: KA.
Aber so vom Gefühl her würde ich sagen, dass nur wenig mehr Platz in der executable'n Datei benötigt wird. Ich denke dass der API-Name in dem Header eingetragen wird sowie ein DWORD an Speicherplatz für die beim Start vom Betriebssystem eingetragenen Speicheradressen.
-
also ich würde sagen nein bzw. nur unwesentlich, da eine Einbindung einer Lib-Datei letztendlich auch eine dynamische Ankopplung ist, nur mit dem Unterschied, daß sie beim starten des Programms automatisch vom Betriebssystem erledigt wird.
-
Wenn die Libs aber nicht genutzt werden, nein.
-
libs, die nur funktionssammlungen sind, stellen lediglich die funktionen bereit und fertig. in die exe gelinkt wird nur, was auch wirklich aufgerufen wird. insofern kannste soviele libs dazulinken, wie du magst.
punkt für nöa.sind die libs so sachen wie kernel32.lib und so, wo es eh ne kernel32.dll zu gibt, bringt die lib selbst bei aufrufen wenig code, denn es werden nur aufrufe in die dll rein erzeugt, die bei programmstart dynamisch geladen wird.
punkt für Uli und HAR.für libs, hinter denen keine dll steht, wird der code in die exe gebunden, der auch aufgerufen wird.
und nun zu den gemeinheiten: wenn die lib globalen speicher allokiert und vor der main initialisiert, wie zum beispiel das objekt std::cout, dann stehen da unter umständen code und daten bereits in der exe, ohne daß man was aufgerufen hat.
ob alleiniges dazulinken also speicher frißt, kann man nicht sicher sagen. afair kann der msvc60 keinen speicher fressen lassen, er ruft eben fehlerhafterweise keine konstruktoren globaler objekte in der lib auf. würde er richtig funkltionieren, könnte das reinlinken speicher fressen.
-
Danke, Leute!

-
Mal 2 dumme Fragen:
-
Wie kann ich bei ner Lib herausfinden, ob es nur ne Importlib (fürs dynamische linken) is oder eine, die wirklich die Funktionen enthält.
-
Wie kann ich in ne Lib reinschauen? Aus welchen Objectfiles sie besteht, aus welchen Funktionen etc.
-
-
1.) Hö? Ich dachte immer, eine LIB ist stets sowas wie ein Link zu einer DLL.
-
WebFritzi schrieb:
1.) Hö? Ich dachte immer, eine LIB ist stets sowas wie ein Link zu einer DLL.
Nein. Man muss unterscheiden zwischen statischem und dynamischen Linken (beim gcc kann man z.B. mit dem Schalter -static dem statischen Binden Vorrang geben). Wenn du statisch zu ner Lib linkst, dann wird der Code der entsprechenden Funktionen aus den Objectfiles wirklich in das ausführbare Binary eingebunden. Dann gibt es noch Importlibs (zu denen unter Win auch immer eine DLL gehört). Wenn du zu so einer Importlib linkst, wird in dein Binary nur ein "stubcode" eingefügt, der zu der jeweiligen Stelle in der DLL führt.
Alle Angaben sind ohne Gewähr :p
-
Und woher weiß der Linker, um welche Art LIB es sich handelt?
-
WebFritzi schrieb:
Und woher weiß der Linker, um welche Art LIB es sich handelt?
Vielleicht ist das einfach in der Lib vermerkt.