Frage

Sagen, ich habe einen statischen C ++ lib, static.lib und ich mag einige Funktionen von einem C ++ Shared lib nennen, sagen shared.lib. Ist es möglich?

Nehmen Sie nun an, dass ich einen anderen gemeinsamen lib, sagen shared2.lib, die static.lib verbindet aber keine Verknüpfung shared.lib. Hat der Linker automatisch shared2.lib Link in diesem Fall shared.lib?

Ich bin mit Microsoft Visual Studio 2003.

War es hilfreich?

Lösung

Statische Bibliotheken sind nicht verbunden. Sie sind nur eine Sammlung von Objektdateien (* .obj oder * .o), die zusammen in eine Bibliothek-Datei archiviert werden (wie eine Art von Teer / zip-Datei), um es einfacher für die Linke, die Symbole zu finden, die es braucht.

Eine statische lib können Funktionen aufrufen, die nicht definiert sind (sondern nur in einer Header-Datei deklariert), da es nur kompiliert wird. Dann, wenn Sie eine exe oder DLL verknüpfen, die die statische lib verwendet werden Sie haben mit einer anderen Bibliothek zu verknüpfen, die die aus dem statischen lib genannt bietet aber nicht darin definiert ist.

Wenn Sie an den Linker wollen automatisch Vorschlag des Link andere Bibliotheken Stephen arbeiten und wird von sehr renommierten Bibliotheken wie Boost und STLport verwendet. Um dies zu tun, die Pragma in der Haupt-Header-Datei für die statische Bibliothek setzen. Sie sollten die statische Bibliothek und ihre Familienangehörigen sind.

Allerdings IMO ist diese Funktion wirklich für Bibliothek Autoren gemeint, wo die Bibliothek in der Systembibliothek Pfad ist so die Linker sich leicht finden. Auch im Fall der Verstärkung und STLport sie verwenden diese Funktion, um mehrere Version der gleichen Bibliotheken mit Optionen definiert mit #defines wo verschiedenen Optionen erfordern unterschiedliche Versionen der Bibliothek verknüpft werden unterstützt. Dies bedeutet, dass Benutzer sind weniger wahrscheinlich, dass boost einen Weg und einen Link mit einer Bibliothek konfiguriert anderen konfigurieren.

Meine Präferenz für Anwendungscode ist explizit die benötigten Teile zu verbinden.

Andere Tipps

Der Linker nicht automatisch in den anderen Bibliotheken bringen wird, aber Sie können einen href verwenden <= „http://msdn.microsoft.com/en-us/library/7f0aews7%28VS.80%29.aspx“ rel = "noreferrer"> #pragma comment (lib, "static.lib") den Prozess zu vereinfachen, indem Sie die Pragma Ihre Header-Dateien die zusätzlichen Dateien zu verknüpfen.

  

Sagen, ich habe eine statische C ++ lib,   static.lib und ich möchte einige nennen   Funktionen aus einer C ++ lib gemeinsam, sagen   shared.lib. Ist es möglich?

Ja zum Beispiel, wenn rufen Sie Windows-Funktionen aus Ihrem statischen lib sie in der Regel von einer dynamischen Bibliothek sind so soll es kein Unterschied sein.

  

Nehmen wir nun an, dass ich eine andere geteilt   lib, sagen shared2.lib die Links zu   static.lib aber keine Verknüpfung zu   shared.lib. Hat der Linker   automatisch verknüpfen shared2.lib zu   shared.lib in diesem Fall?

Mit Abhängigkeiten wie diese könnten später zu Problemen führen, würde ich vorschlagen, dass Sie stattdessen dynamisch die Bibliotheken laden mit

scroll top