Question

Je sais qu'il ya quelques questions similaires, mais je ne pense pas qu'ils ont vraiment les mêmes exigences que le mien.

Notre DLL est compilé avec Visual Studio 2005 et le lien doit avec une version spécifique du CRT, en raison des contraintes d'installation. Ceci est absolu, recompilée avec la dernière version est pas une solution.

Nous avons récemment mis à jour nos bibliothèques Boost. Cependant, quand je construit Boost, il utilise automatiquement la dernière CRT. Maintenant, quand je créer un lien Boost avec notre programme, il crée une dépendance à la fois la nouvelle version (wrong) du tube cathodique et l'ancienne version (correcte) du tube cathodique. La dépendance à la nouvelle version doit aller.

Quelle est la meilleure solution à ce problème? À l'heure actuelle, le meilleur que je peux penser est la reconstruction Boost en utilisant l'ancienne version, mais je ne sais pas comment faire facilement que sans modifier la source.

S'il y avait un moyen de forcer Visual Studio à utiliser une version spécifique du tube cathodique au niveau mondial (et non sur une base par projet), ce serait formidable. Ou un moyen de simplement supprimer simplement la nouvelle version du tube cathodique, mais je suis sûr que ce n'est pas possible car je pense qu'il est considéré comme faisant partie du système d'exploitation.

Était-ce utile?

La solution 2

La solution a été modifie manuellement le manifeste incorporé pour supprimer la dépendance à la dernière CRT, car il est construit avec le CRT liée dynamiquement. Je remets en question la sécurité de ce fait, cependant.

Pour une raison quelconque, la force, y compris un fichier targetsxs au cours du processus de construction Boost n'a pas le forcer à cibler le CRT spécifié.

Autres conseils

AFAIK, il est recommandé de ne pas utiliser les différentes versions de CRT. Contrairement à .NET où vous pouvez vous référer à une dll .NET 1.1 à partir d'une dll .NET 2.0, Unmanaged ne fournit pas cette flexibilité.

Puisque vous ne pouvez pas mettre à jour votre dll utiliser CRT plus récente, la seule chose que vous pouvez faire est de reconstruire Boost dans VS2005.

En outre, il est recommandé de ne pas relier deux dll de différents CRT. Elle peut conduire à des problèmes tels que la corruption de la mémoire.

Note:. Chaque Visual Studio a sa version CRT par défaut auquel tous les DLLs se réfèrent

Aussi je ne comprenais pas « retirer le nouveau CRT ». Vous devrez installer le Redist Visual Studio pour chaque version de Visual Studio que vous utilisez. (Ce Redist contient le dll CRT) http://msdn.microsoft.com/en- nous / bibliothèque / abx4dbyh% 28VS.80% 29.aspx

Vous devez trouver exactement ce qui construit dans le projet de la dépendance boost injecte du mauvais CRT et de supprimer / modifier cette construction. Il est peut-être quelque chose dans .vcproj fichier ou d'un manifeste ou quelque chose comme ça.

VC ++ 2005 et VC ++ 2008 contiennent plus ou CRTs moins les mêmes primitives - vous pouvez probablement recompiler stimuler entièrement avec VC ++ 2005 ou ruser un peu et recompiler après. Oui, cela nécessite un certain effort, mais il est le seul moyen d'aller - à la fois votre code et le code de boost doit être compilé avec la version du CRT que vous voulez utiliser

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top