Dynamisches Linken

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Sven
Beiträge: 6
Registriert: So 17. Mai 2009, 21:31

Dynamisches Linken

Beitrag von Sven »

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

knight
Beiträge: 802
Registriert: Mi 13. Sep 2006, 22:30

Re: Dynamisches Linken

Beitrag von knight »

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?
Daran hat sich noch nichts geändert.

knight

Benutzeravatar
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

Beitrag von af0815 »

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
Ich glaube, man sollte zwischen Packages und Bibliotheken bei dem Thema unterscheiden.

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

Beitrag von Christian »

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/

Sven
Beiträge: 6
Registriert: So 17. Mai 2009, 21:31

Re: Dynamisches Linken

Beitrag von Sven »

@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.

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

Beitrag von Socke »

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.
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).

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

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

Beitrag von marcov »

Christian hat geschrieben:Nö, packages sind dynamisch gelinkte Bibliotheken ist also nichts unterschiedliches. Ich nehme an er meint hier "Smart Linken"
Es gibt schon unterschiede

- 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;

Antworten