Pergunta

Eu sei que há algumas perguntas semelhantes, mas eu não acho que eles realmente têm os mesmos requisitos que o meu.

A nossa DLL é compilado com Visual Studio 2005 e deve link com uma versão específica do CRT, devido a restrições de instalação. Este é absoluta, recompilar-lo com a versão mais recente não é uma solução.

Recentemente, atualizamos nossas bibliotecas de impulso. No entanto, quando eu construí Boost, que costumava automaticamente o mais recente CRT. Agora, quando eu ligar impulso com nosso programa, ele cria uma dependência tanto a versão mais recente (errado) da CRT e da antiga versão (correta) da CRT. A dependência sobre as mais recentes necessidades de versão para ir.

O que é a melhor solução para este problema? No momento, o melhor que eu posso pensar é a reconstrução impulso usando a versão antiga, mas não tenho idéia de como fazer facilmente que, sem modificar a fonte.

Se houvesse uma maneira de forçar o Visual Studio para usar uma versão específica do CRT globalmente (não em uma base por projeto), que seria ótimo. Ou uma maneira de simplesmente remover a versão mais recente do CRT, mas eu tenho certeza que isso não for possível desde que eu acho que é considerada parte do sistema operacional.

Foi útil?

Solução 2

A solução foi modificar manualmente o manifesto incorporado para remover a dependência no mais novo CRT, uma vez que é construído com a CRT ligados dinamicamente. Eu questiono a segurança desta, no entanto.

Por alguma razão, força, incluindo um arquivo targetsxs durante o processo de impulso de construção não forçá-lo a atingir o CRT especificado.

Outras dicas

AFAIK, não é recomendado o uso de diferentes versões do CRT. Ao contrário .NET onde você pode se referir a um .NET 1.1 dll de uma dll .NET 2.0, não gerenciado não fornece essa flexibilidade.

Desde que você não pode atualizar suas DLLs para usar mais recente CRT, a única coisa que você pode fazer é reconstruir impulso no VS2005.

Além disso, não é recomendado para ligar duas dlls de CRT diferente. Ele pode levar a problemas como a corrupção de memória.

Nota:. Cada Visual Studio tem sua versão CRT padrão para que todas as DLLs referem

Também eu não entendi "remover o novo CRT". Você precisará instalar o Visual Studio Redist para cada versão do Visual Studio que você usa. (Isso redist contém a dll CRT) http://msdn.microsoft.com/en- us / library / abx4dbyh% 28VS.80% 29.aspx

Você tem que encontrar exatamente o que construir no injeta impulso do projeto a dependência do CRT errado e remover / modificar essa construção. Pode ser algo em .vcproj arquivo ou algum manifesto ou algo parecido.

VC ++ 2005 e VC ++ 2008 CRTs contêm mais ou menos as mesmas primitivas - você provavelmente pode recompilar impulso inteiramente com VC ++ 2005 ou ajustá-lo um pouco e recompilação depois disso. Sim, isso vai exigir algum esforço, mas é a única maneira de ir - tanto o seu código e código de impulso deve ser compilado contra a versão do CRT você quiser usar

.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top