Dies ist die Situation.So verknüpfen Sie Ihre externen Bibliotheksabhängigkeiten in einer statischen Bibliotheksdatei in VS2015
Ich habe ein Bibliotheksprojekt A, das andere Drittanbieterbibliotheken verwendet und manipuliert, nennen wir sie T1 und T2.
Allerdings, wenn ich diese Bibliothek A in einem meiner anderen Projekte verwende, beschwert es sich, dass es die Drittanbieterbibliotheken T1 und T2 nicht öffnen kann, obwohl es sie nicht direkt verwendet. Natürlich verwendet es sie indirekt durch Bibliothek A, weil A die entsprechende Arbeit zum Verknüpfen und Einschließen gegen diese Bibliothek usw. gemacht hat.
Muss ich wirklich diese anderen Bibliotheken zu den Projekten hinzufügen, die Bibliothek A verwenden, oder gibt es eine Möglichkeit zu lassen Sagen Sie Bibliotheken so zusammen, dass der Benutzer der Bibliothek A sich nur darum kümmern muss, anstatt dessen, woraus er besteht.
Edit:
Gefunden einige verwandte Fragen, aber die Antworten lösen nicht ganz die Ausgabe;
Edit2:
Vielen Dank für die bisher Antworten. Lass mich meine Situation klären.
Ich habe ein .lib-Projekt in VS2015, die wir rufen MathLib. Diese MathLib verwendet können sagen, eine Boost-Bibliothek intern, um ihre Berechnungen zu tun, können diese Bibliothek aufrufen BoostMath. Die Eigenschaftendateien sind alle so eingestellt, dass sie diesen BoostMath enthalten und verwenden, und dies funktioniert perfekt im Bibliotheksprojekt selbst.
Ich mache jetzt ein anderes Projekt Benutzer, der die MathLib verwendet, um seine Berechnungen zu tun. Es enthält die entsprechenden Includes und alle, um diese Bibliothek zu benutzen. Es beschwert sich jedoch über die Tatsache, dass es die BoostMath-Bibliothek nicht kennt und daher nicht mit der MathLib-Bibliothek arbeiten kann.
Man könnte argumentieren, warum nicht nur BoostMath in Projekt Benutzer auf die gleiche Weise beinhalten, dass die MathLib Bibliothek dies tat, sondern dass der Punkt fehlt. Ich möchte eine eigene Bibliothek erstellen, die andere interne Bibliotheken verwenden kann oder auch nicht, aber dies sollte den Endbenutzer meiner Bibliothek nicht betreffen.
Ich muss wahrscheinlich etwas in VS Librarian setzen, um dies zu erreichen, verketten die Bibliotheken zusammen oder einige. Aber ich kann es nicht herausfinden. Irgendwelche Gedanken?
Edit3: Ich fand auch die exakt gleiche Kommandozeile in den Eigenschaftsdateien wie in diesen answer erwähnt.
/OUT:"MathLib.lib" "BoostMath.lib" /NOLOGO /LIBPATH:"path\lib"
Allerdings funktioniert es aus irgendeinem Grund nicht. Wenn ich es mit und ohne die Librian-Eigenschafteneinstellung ausführe, bleibt die .lib-Binärdatei gleich.
Scheinbar ist diese Funktionalität seit VS2010 gebrochen? Nach this Antwort. Nützliche andere question. Edit4:
Ich mag im Grunde, dies zu tun, aber es scheint nicht
+---------------+
| End user exe |
+---------------+
|
| some api call
|
+---------------+
| My MathLib |
+---------------+
|
|
+---------------+------------+----
| | |
+-----+------+ +-----+-----+
| BoostMath | | OtherMath |
+------------+ +-----------+
Wenn [diese Antwort] (http://stackoverflow.com/a/2157735/751579) bei der Frage, die Sie verknüpft haben, Ihre Frage nicht beantwortet, müssen Sie Ihre Frage klären, warum nicht. – davidbak