Frage

Ich werde nicht ins Detail gehen auf den „Media-Player“ Teil mit Ausnahme der Tatsache, dass es offensichtlich Plug-Ins verwenden, die eine einfache dynamische Bibliothek sein wird, die zur Laufzeit geladen wird. Nun könnte ich diese Plug-ins dynamisch ihre Abhängigkeiten verknüpfen, oder ich konnte sie statisch verknüpfen. Beide haben ihre Vor- und Nachteile - ich zähle Linux hier nicht, wie das wird gemeinsam genutzte Bibliotheken verwenden

.

Der einzige Vorteil, den ich bei der Verwendung von gemeinsam genutzten Bibliotheken zu sehen ist, dass die Bibliothek unabhängig vom Programm aktualisiert werden kann. Unter Windows ist dies selten ein Vorteil, da die Bibliothek auf die Anwendung der nächste sein mit ihm (dank ohne offizielle C ++ ABI). Unter Windows mit der Verringerung DLL Hölle und teilen sich die C libaries zu helfen, würde ich SxS verwenden, die nicht eine wirklich nette Bürger ist.

Wie für statische Bibliotheken, ich sehe einen großen Vorteil: Link-Zeitoptimierungen. Diejenigen ave durch ICC und VC ++ unterstützt für eine ganze Weile und GCC hat eine Niederlassung für sie. Da ich wahrscheinlich VC verwenden werde ++ unter Windows würde es eine spürbare Leistungsverbesserung als Compiler sein (na ja, die eigentliche „Compiler“ nur wandelt C ++ in eine Zwischensprache, so dass hier der Compiler ist der „Linker“) hat vollkommene Kenntnis von der Code und kann viele Sachen auf diese Weise optimieren. Dies ist die Option Ich bin Neigung in Richtung.

Meine Frage ist, was man den Beste sein würde in meinem spezifischen Fall?

Es gibt keine Sorge anderer Anwendungen mit ihnen, wie ich in dieser Frage nicht Linux zählen (obwohl ich habe keine Kenntnis von O X) oder mehr Instanzen (die den gleichen Media-Player läuft zweimal überhaupt?), Binäre Kompatibilität ( wie ich alles mit der Anwendung verteilen werden) oder einfach der Aktualisierung (Windows werde ich zum verteilen von Updates eine sehr effiziente binäre diff Patcher verwenden).

War es hilfreich?

Lösung

Ich bin mir nicht ganz sicher, was Ihr „spezifischer“ Fall ist.

Wenn Ihr „Media-Player“ für einen gut kennen eindeutigen Client bestimmt ist (oder kleine Gruppe von Kunden), die alle auf einmal den Media-Player aktualisieren oder beliebige Plugin sofort unter Ihrer vollständigen Überwachung dann werde ich für statische gehen Bibliotheken.

Wenn das nicht der Fall, dass ich für dynamische Bibliotheken gehen würde. Optimierungen sind gut, aber nicht so gut wie Kunde / die Zufriedenheit der Nutzer. Es gibt nichts Schlimmeres als Ihre xxx Bibliothek auf die neueste Version zu aktualisieren und alle plötzlich Dinge gerade zu arbeiten aufhören. Wenn Sie nicht kontrollieren, wann und wie Updates werden so flexibel gemacht, wie Sie können.

Antwort auf den Kommentar:

In der Regel dynamische Bibliotheken sind rückwärtskompatibel für Minor-Release-Versionen, während statische Linken auf eine konkrete Version abhängig sein könnte und brechen, wenn Sie versuchen, es auf eine andere Freigabe zu verbinden. Mit Dynamic Ihr Programm verknüpfen könnte sogar funktionieren, solange die Anrufe, die Sie verwenden, nicht ändern, während statische Linken auf einer Änderung der Funktion in der Bibliothek Offset abhängen könnten.

Zum Beispiel statische Bibliotheken können im laufenden Betrieb in den Adressraum des Prozesses in einem statischen Offset geladen werden. Natürlich können für bestimmte Optimierungen dieser Versatz zu wissen, aber wenn Sie die Bibliothek aktualisieren dann entweder Sie alle Plugins aktualisieren, dass die Bibliothek oder wahrscheinlich die nicht aktualisierten Plugins funktionieren nicht (als Funktion könnte sehr gut Offset geändert haben).

Ich nehme an, Sie sie in Laufzeit laden, obwohl, wenn diese benannt werden kann statische Linken in der Luft, in jedem anderen Fall werden Sie nur die Bibliothek auf jedem Plug-in und es wird kein „Sharing“ sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top