Hallo alle,
ich hab mich gerade ein wenig in dynamisches und statisches Linken eingelesen.
Verstehe ich es richtig, dass meine Programme kleiner werden, wenn ich sie dynamisch linke? Zwar muss der Benutzer dann erst ein Runtime Package(?) installieren, aber das RP würde, egal wie viele meiner Programme er installiert und laufen hat, nur einmal Speicher verbrauchen auf seiner Platte und in seinem RAM? Weil ja alle meine Programme die selbe Instanz des Runtime Package benutzen und nicht jedes seine eigene mitbringt.
Im Lazarus Wiki hier hab ich gelesen, Lazarus könne das noch nicht, allerdings mit Stand vom 19. August 2007. Kann es das inzwischen?
Wenns schon nen Thread dazu gibt verzeiht bitte, meine Suche nach "dynamisch linken" und "dynamic link" brachte nichts passendes.
Tschau, Sven
Dynamisches Linken
Re: Dynamisches Linken
Daran hat sich noch nichts geändert.Sven hat geschrieben: Im Lazarus Wiki hier hab ich gelesen, Lazarus könne das noch nicht, allerdings mit Stand vom 19. August 2007. Kann es das inzwischen?
knight
- af0815
- Lazarusforum e. V.
- Beiträge: 7039
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Dynamisches Linken
Ich glaube, man sollte zwischen Packages und Bibliotheken bei dem Thema unterscheiden.Sven hat geschrieben:ich hab mich gerade ein wenig in dynamisches und statisches Linken eingelesen.
Verstehe ich es richtig, dass meine Programme kleiner werden, wenn ich sie dynamisch linke? Zwar muss der Benutzer dann erst ein Runtime Package(?) installieren
Man kann durchaus ja Bibliotheken (dll -Windows, so -> Linux) mit Lazarus erstellen und diese verwenden. Diese können dann sowohl statisch, als auch dynamisch gelinkt werden. Installieren muß die der Benutzer auch und die BS bestehen ja selbst aus diesen Bausteinen. Ist aber was anderes wie die Packages.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
Christian
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Dynamisches Linken
Nö, packages sind dynamisch gelinkte Bibliotheken ist also nichts unterschiedliches. Ich nehme an er meint hier "Smart Linken"
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: Dynamisches Linken
@knight: Danke für die Info.
Smart Linking hab ich mir jetzt auch angesehen. (Spoiler für Suchende: Das bedeutet, unbenutzte Code-Teile möglichst aus der erstellten Programmdatei rauszulassen.)
Das ist natürlich auch ne tolle Option und habs gleich mal aktiviert, danke für den Tipp.
Gemeint hatte ich es allerdings nicht, sondern dass z.B. die LCL nur einmal installiert und dann aus jeder EXE aufgerufen wird statt in jede Programmdatei hineincompiliert. So glaube ich funktionierts auch bei Visual C++ mit den VC Redistributable Packages.
Smart Linking hab ich mir jetzt auch angesehen. (Spoiler für Suchende: Das bedeutet, unbenutzte Code-Teile möglichst aus der erstellten Programmdatei rauszulassen.)
Das ist natürlich auch ne tolle Option und habs gleich mal aktiviert, danke für den Tipp.
Gemeint hatte ich es allerdings nicht, sondern dass z.B. die LCL nur einmal installiert und dann aus jeder EXE aufgerufen wird statt in jede Programmdatei hineincompiliert. So glaube ich funktionierts auch bei Visual C++ mit den VC Redistributable Packages.
-
Socke
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Dynamisches Linken
Ich meine irgendwo einmal gelesen zu haben, dass sich jemand Gedanken genau darum gemacht hat (aber eher auf der Basis der Sprachunabhängigkeit). In dem Falle könnte man aber auch direkt ein Interface für wxWidgets erstellen, da die auch nichts anderes machen, als das OS-Widgetset zu kapseln (wxWidgets kann man sowohl dynamisch als auch statisch linken).Sven hat geschrieben:Gemeint hatte ich es allerdings nicht, sondern dass z.B. die LCL nur einmal installiert und dann aus jeder EXE aufgerufen wird statt in jede Programmdatei hineincompiliert.
Meine Meinung dazu ist, dass ich Runtime-Libraries nicht mag, da ich als ehemaliger Windoofie es immer gehasst habe, dass für ein einziges Programm eine ganze RL installiert werden muss, die nicht einmal ansatzweise vollständig genutzt wird. Wenn aber ein Programmpaket mit einer Library hat, dürfte das einen kleines RAM-Ersparnis ergeben (Festplattenplatz ist mittlerweile unbedeutend). Dazu gibts dann evtl. noch Probleme mit den Versionen (ich habe etliche Versionen der MS-C-Runtime oder auch der binkw32), sodass jedes Programm dann doch wieder seine eigene Bibliothek mitbringt.
MfG Socke
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
marcov
- Beiträge: 1104
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Dynamisches Linken
Es gibt schon unterschiedeChristian hat geschrieben:Nö, packages sind dynamisch gelinkte Bibliotheken ist also nichts unterschiedliches. Ich nehme an er meint hier "Smart Linken"
- Mit Packages weißt der Kompiler alles über die Libraries. Mit DLLs nicht (die Header bestimmen dass im DLL Fall , aber der Kompiler garantiert nicht dass DLLs und Header überein stimmen)
- Mit Packages ist ein unit nur einmal im logischem Program (packages+.exe).
- Wenn ein Unit (unit1) in einem Package A ein dependancy auf einem anderen unit (unit2) hat, soll der auch in einem Package sein. Wenn unit2 dann nicht in Package A ist, aber zb in Package B, dan soll Package B in requires Klausel von package A eingetragen werden. (requires=uses aber dan für Packages)
Der Punkt ist das der Kompiler den kompletten Übersicht hat wenn gelinkt wird. Er hat nicht nur mit losen manuellen Koppelungen wie Headers zu machen, aber hat alle Informationen von allen Units da. Das ist den Unterschied zwischen C++ und Delphi, da C++ noch immer kein modulen/units hat.
Anderseits meint das fuer normales Linken das ein Shared Lib + .exe wie zwei separate Programme sind, mit eine schmalen Interface (den Header) dazwischen. Das heißt auch zwei mal RTL, und schlimmer zwei mal RTL state (internationalization, heapmanager usw).
Siehe auch http://wiki.freepascal.org/packages" onclick="window.open(this.href);return false;