VS2010 statisch verknüpfen Problem

meine Firma hat kürzlich ein Upgrade von VS2005 auf VS2010. Wir haben ein riesiges Projekt, die verwendet eine Menge von Modulen, die miteinander verbunden sind statisch in die exe-Datei. Aber scheint es einige Probleme mit der Verlinkung in VS2010.

Erklären unser problem, wir haben gebaut, ein minimal-Beispiel-Projekt, welches aus wie auf dieser Grafik:

VS2010 statisch verknüpfen Problem

Es ist eine Anwendung, die eine Funktion aus der Bibliothek A. Bibliothek Ein Aufruf einer Funktion jeder Bibliothek B und Bibliothek C. mit Diesen zwei Bibliotheken, eine Funktion aufzurufen, bereitgestellt durch Bibliothek D.

Für Exe 1 unter Framework und Verweise wir alles, was zu false außer für Link Library-Abhängigkeiten, die auf true festgelegt ist. Der einzige Verweis Hinzugefügt wird, wird die Verknüpfung zu Bibliothek Ein. Für die einzelnen Bibliotheken werden alle Einstellungen auf false gesetzt. Bibliothek bekommt Verweise nur B und C, sowie solche zwei immer Verweise auf D nur. Bibliothek D hat keine Referenzen.

Beim erstellen der Anwendung, es funktioniert ohne Probleme. Die Anwendung bemerkt, dass Bibliothek a verwendet Eine Bibliothek B und C, die Bibliothek mit D, so dass Sie es weiß, hat sich die Verknüpfung von Bibliotheken, zu. Die libs verlinkt sind in der exe-Datei ohne Probleme.

Wir jetzt etwas ändern in, sagen wir mal, Bibliothek D. Nur ein kleiner Unterschied, nur ein Brief. Jetzt versuchen wir, bauen Sie die Anwendung erneut, es bemerkt die änderung und re-kompiliert Bibliothek D, aber: Es ist kein link um es nicht mehr. Das Ergebnis sind Verknüpfungsfehler in Bibliothek B und C, weil Sie Bibliothek D. Wir müssen laufen Rebuild erste, um zu zwingen, das komplette Gebäude und dann ist alles wieder verknüpft.

Dies geschieht sowohl für die minimal-Beispiel als auch für unser Hauptprojekt. Natürlich, wir können hinzufügen, die einzelnen Bibliotheken als zusätzliche Abhängigkeit für die exe aber es wäre schön, wenn es funktionieren würde, so wie es beim erstellen des Projekts zum ersten mal mit und arbeiten nach den änderungen im code. Uns ist aufgefallen, dass bei der Festlegung Verwenden, Bibliothek Abhängigkeit Eingänge zu wahr, dass es wieder funktioniert, aber dann ist es nicht link, der *.lib-Dateien, aber die *.obj-Dateien, die nicht ist, was wir wollen, natürlich.

Hat jemand vergleichbare Erfahrungen gemacht oder hat jemand eine Lösung für dieses Problem? Ist das ein fehlerhaftes Verhalten von VS2010?

TIA.

p.s.: Alle Bibliotheken und ausführbaren Dateien sind native C++.


Edit: (Workaround entnommen diese Website)

In der Datei %ProgramsFile%\MSBuild\Microsoft.cpp\v4.0\Microsoft.CPPBuild.Targets es ist eine Linie

<Target Name="GetResolvedLinkLibs" Returns="@(LibFullPath)" DependsOnTargets="$(CommonBuildOnlyTargets)">

Wenn Sie sich ändern, die Linie zu

<Target Name="GetResolvedLinkLibs" Returns="@(LibFullPath)" DependsOnTargets="$(CommonBuildOnlyTargets);ResolvedLinkLib">

die Verknüpfung ordnungsgemäß funktioniert und alle benötigten libs verknüpft sind, ist implizit. Die linker-Ausgabe zeigt nicht nur lib_a.lib aber auch alle anderen gekettet libs, lib_b, lib_c, lib_d die zimmerreserviereung, ohne das Sie manuell Hinzugefügt, da die Abhängigkeiten zu den exe.

Scheint dies mehr ein workaround dann eine Lösung, vielleicht gibt es ein richtige Art und Weise zu erreichen implizite Verknüpfung.

InformationsquelleAutor Exa | 2011-06-22
Schreibe einen Kommentar