Durchsetzung C++ compiler für die Verwendung von bestimmten CRT-version?
Bin ich mit VS2008 für die Entwicklung einer COM-dll, die standardmäßig verwendet die CRT-version 9
aber ich bin mit TSF (Text-service-framework), die nicht kompatibel mit dem neuen CRT. Ich denke, die Lösung ist die Nutzung des kompatibler so, wie kann ich festlegen, in der CRT-version?
- Siehe Vorherige Antwort: stackoverflow.com/questions/693250/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich ganz herzlich join die Empfehlung nicht manuell ändern Sie die CRT-version, die Sie link gegen. Wenn jedoch aus irgendeinem Grund (was ich nicht vorstellen kann), ist dies die richtige Vorgehensweise für Sie, die Art und Weise dies zu tun ist, ändern Sie die manifest für Ihr Projekt.
Stellen Sie zunächst sicher ein manifest ist nicht generiert für jede Version zu erstellen (auf VS2005: Konfiguration Eigenschaften/Linker/Manifest file/Generate-manifest), als würde es Sie überschreibt Ihre manuellen änderungen. Auch stellen Sie sicher, dass die Isolierung aktiviert ist.
Als Nächstes suchen Sie die manifest-Datei sollte im $(IntDir) (z.B. Debug). Sollten Sie einen Abschnitt ähnlich zu -
(Für debug-builds, natürlich). Sie Bearbeiten müssen, müssen Sie die version und publicKeyToken Attribute der CRT-element.
Sie können die Liste der Dateien auf Ihrem lokalen WINDOWS\WinSxS Ordner zu sehen, den verfügbaren Versionen. Überprüfen Sie hier, wie zum extrahieren der publicKeyToken einmal, finden Sie die version, die Sie wollen. (Obwohl ich würde zuerst versuchen und schauen direkt in die manifeste von anderen Projekten, verknüpfen Sie gegen Ihre gewünschte CRT-version).
Wenn Sie dorthin gehen, erwarten, dass einige rauen Wasser. Können Sie etwas Glück haben, wenn Ihre Anwendung ist eine Konsolenanwendung, die nicht link gegen andere Side-by-Side-Komponenten (MFC, OpenMP, etc.). Wenn Ihre Anwendung ist nicht trivial, ich würde sein überrascht, wenn dort nicht auch einige komplizierte version Abhängigkeiten amont die SxS-Komponenten.
(Bearbeiten), würden Sie auch brauchen, um mit Ihrer Anwendung verteilen, die spezifischen CRT, die Sie verwenden. Hier ist jemand wer das gemacht hat.
Der einfachste Weg wird sein, zu bauen Ihre DLL mit VC++ version verwendet, die das CRT, dass ist kompatibel mit TFS.
Ich glaube nicht, dass es eine gute Idee, nur die Anbindung der DLL mit einer anderen version der CRT, es sei denn, Sie verwenden auch die gleiche version der header-Dateien. Und der einfachste Weg dies zu tun, werden die richtigen VC++ - version...
Wenn Sie immer noch wollen, um zu versuchen, Sie können:
Sie können auch versuchen, ändern Sie die Standard-Verzeichnisse in "Tools->Optionen->Projekte und-Lösung->VC++ - Verzeichnisse->Bibliothek-Dateien". Vielleicht ändern $(VCInstallDir)lib in den Pfad, wo Sie die andere version der CRT befindet, wird den trick tun
Versuchen Sie nicht VS9 und link zu einer anderen version der CRT.
Wenn Sie Ihre app um eine Verknüpfung zu einem anderen CRT, sagen VS8 CRT, dann müssen Sie kompilieren & verknüpfen Sie Ihre app in dieser version von VS.
Die Lösung funktionierte bei mir mit Visual Studio Express 2013 x64 + OpenCV 2.4.9 x64 kompiliert, debug (ich integriert, dass in LV2013 x64), aber es sollte funktionieren, für andere VS-version:
1) mit der Rechten Maustaste auf die Projektmappe > Eigenschaften > Debug Quellcode-Dateien ...
2) gibt Es vielleicht zwei Einträge (je nach VS-install-directory)...
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\vc7\atlmfc
C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\vc7\crt
Mit diesen, es würde für Visual Studio 2013 Express, sollte aber auch für andere 2013. Hast du Visual Studio 10 oder 11 geben Sie einfach "Microsoft Visual Studio 11.0" oder 10.0 in jedem. Sie können auch einfach hinzufügen.
Diese Einträge erhalten Sie von Ihrem OpenCV.sln im Projektmappen - > Eigenschaften > Debug Quellcode-Dateien (wie oben beschrieben). Und wie schon beshrieben: CRT übereinstimmen muss... und das passiert in diesem Ort.