Pergunta

Eu estou usando VS2008 para o desenvolvimento de uma DLL que por padrão usa CRT versão 9 mas eu estou usando TSF (estrutura de serviços de texto) que não é compatível com o novo CRT. Eu acho que a solução é usar o único compatível assim como eu posso especificar a versão CRT?

Foi útil?

Solução

toda vivamente juntar-se a recomendação não para alterar manualmente a versão CRT você vincular contra. Se, no entanto, por alguma razão (que eu não posso imaginar), este é o curso certo de ação para você, a maneira de fazer isso é mudar o manifesto para o seu projeto.

Primeiro certifique-se de um manifesto é não gerado em cada compilação (no VS2005: Propriedades de configuração / Linker / arquivo Manifest / Gerar manifesto), como seria substituir as alterações manuais. Também certifique-se lá que o isolamento é habilitado. Em seguida, localize o arquivo de manifesto - deve estar no $ (IntDir) (por exemplo, Debug). Você deverá ver uma seção semelhante a -

  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>

(para compilações de depuração, é claro). Você precisa editar a versão e atributos publicKeyToken do elemento CRT. Você pode inspecionar os arquivos em sua pasta local WINDOWS \ WinSxS para ver as versões disponíveis. Verifique aqui como extrair o publicKeyToken uma vez que você encontrar a versão desejada. (Embora eu primeiro tentar e olhar diretamente nos manifestos dos outros projetos, vinculando contra a sua versão CRT desejado).

Se você for lá, esperar alguma água áspera. Você pode ter um pouco de sorte se o seu aplicativo é um aplicativo de console que não ligar com outros componentes Side-by-Side (MFC, OpenMP, etc.). Se a sua aplicação não é trivial, eu ficaria surpreso se não houver algumas dependências de versão intrincados AMONT os componentes SxS.

(edit) Você também precisaria para distribuir com o seu aplicativo do CRT específico que você está usando. Aqui está que fez isso.

Outras dicas

A maneira mais fácil será para construir sua DLL com uma versão VC ++ que utiliza o CRT que seja compatível com o TFS.

Eu não acho que é uma boa idéia apenas para vincular sua DLL com uma versão diferente do CRT, a menos que você também usar a mesma versão dos arquivos de cabeçalho. E a maneira mais fácil de fazer isso é usar o direito VC ++ versão ...

Se você ainda quiser tentar, você pode:

  • vá para "Configuração configurações-> Linker-> Input> Ignorar biblioteca específica" e digite o CRT você está usando (libc.lib, LIBCMT.LIB, etc. ver este projeto de código artigo para detalhes).
  • Digite o nome da versão CRT que pretende utilizar em "Configuração configurações-> Linker-> Input> dependências adicionais", e seu caminho em "Configuração configurações-> Linker-> Geral-> diretórios de bibliotecas adicionais".

Você também pode tentar mudar os diretórios padrão em "Ferramentas> Opções> Projetos e solução-> VC ++ Diretórios> arquivos de biblioteca". Talvez mudando lib $ (VCInstallDir) para o caminho onde você outra versão das reside CRT irá fazer o truque

Não tente usar VS9 e link para outra versão do CRT.

Se você precisar de seu aplicativo para link para outro CRT, dizem CRT de VS8, então você deve compilar e vincular seu aplicativo nessa versão do VS.

A solução funcionou para mim com o Visual Studio Express 2013 x64 + OpenCV 2.4.9 x64 compilado, debug (I integrado que em LV2013 x64), mas deve funcionar para qualquer outro VS-version:

1) Botão direito do mouse em seu Solution> Propriedades> Debug Source Files ...

2) Há talvez dois entires (dependendo do seu 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

Com estes ele iria trabalhar para Visual Studio 2013 expresso, mas também deve trabalhar para outras 2013. Se você tem Visual Studio 10 ou 11 apenas digite "Microsoft Visual Studio 11,0" ou 10,0 em cada um. Você também pode simplesmente adicioná-los.

Essas entradas você pode obter a partir de sua OpenCV.sln sob Solution> Propriedades> Debug Source Files (como descrito acima). E como já decribed:. CRT precisa corresponder ... e isso acontece naquele lugar

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