Pergunta

O que há na MS Visual C ++ Runtime Library? Quero dizer, eu pesquisei no Google e sempre encontrei coisas como ajuda, o App XXXX me dá erro de biblioteca MS Visual C ++ Runtime, sem explicação.

Eu pensei que as bibliotecas de tempo de execução do Windows C vinham com o Windows? Não com VC ++? Obrigado.

EDIT: Primeiro, obrigado por respostas. Agora, tenho uma má idéia das bibliotecas de tempo de execução no Windows. Quero dizer, a primeira parte, que o Windows internamente tem sua API Win32 e, portanto, tudo bem, eu sabia. Além disso, o Win32API é do kernel e peças de usuário.

Mas eu sempre pensei que funções como o GDI são acessadas como DLL (que eu ainda acredito que são). Mas eu pensei que mesmo funções como printf E assim estão em algum arquivo do Windows.

Então, estou certo, quando sei que as funções "simples" como printf Precisa ser vinculado diretamente e usar apenas o kernel parte do sistema operacional diretamente, e as funções da API do Windows mais sofisticadas são vinculadas como DLLs, portanto, não são distribuídas com o compilador, mas com o sistema operacional? E eles posteriormente acessam o kernel?

Quero dizer, digamos GDI, eu digo para desenhar, ele faz todo o trabalho árduo no modo de usuário e que chame a função do kernel que coloca tudo no Framebuffer?

E pela última vez pensou, por que isso está resolvido dessa maneira? Quero dizer, se o tempo de execução do VC ++ é apenas uma camada entre C e Winapi, por que o VC ++ não pode chamar diretamente de Winapi?

Foi útil?

Solução

Uma breve resposta seria que o MSVS C/C ++ Runtime implementa funções como Malloc/Free, Stdio, iostream e algumas C ++-coisas como Dynamic_cast e Manipulamento de exceção. Isso difere entre as versões do Visual Studio, portanto, existem diferentes tempos de execução para versões diferentes.

O Windows é enviado principalmente com uma API C (a API Win32), que é bastante diferente da biblioteca padrão C/C ++. As chamadas de tempo de execução do MSVS C/C ++ nesta API para alocar memória, etc. etc.

(Suponho que alguns dos aplicativos incluídos no Windows são escritos com MSVs e em C ++, para que incluam o tempo de execução do MSVS para essa versão.)

Além disso, as mudanças de tempo de execução à medida que as novas versões do Visual Studio são lançadas. Uma versão do Windows dura muito mais tempo do que isso.

Outras dicas

Esta é uma simplificação excessiva, mas dará a você a essência. O MSVCRT é um conjunto de DLLs que implementa partes da linguagem C ++. Funções como printf, memcpy e similares são implementados nessas DLLs.

Todo programa que é compilado com um compilador específico e dinamicamente vinculado aos horários de execução C ++ deve de alguma forma ter a versão correta dos binários da CRT na máquina de destino. Como resultado, os aplicativos que os usuários enviados para o final são frequentemente (geralmente?) Também enviados com um pacote dessas DLLs. Este pacote é chamado de "redistribuível" (ou "redist") e existe um diferente para cada combinação de versão exata do compilador e plataforma de destino. Por exemplo, há redistas separados e distintos para cada um dos seguintes:

  • MSVC 10, janelas de 64 bits
  • MSVC 10, janelas de 32 bits
  • MSVC9, janelas de 64 bits
  • MSVC9 SP1, janelas de 64 bits

Et Cetera.

Sim, o Windows geralmente "vem com alguma versão do CRT. No entanto, vem com as versão (s) que ele precisa para executar os aplicativos enviados com o Windows. Se o Windows e todos os seus aplicativos foram compilados no MSVC8 SP2 e seu aplicativo é compilado no MSVC10, o CRT vocês requer não estará presente na caixa simplesmente porque está executando o Windows.

É por isso que sua prática comum de enviar aplicativos junto com redistas.

EDITAR:

Por meio de Houdini como Magic, prevejo que sua próxima pergunta será "Onde eu recebo os redistas?"

A resposta é, da Microsoft. Experimente uma pesquisa no Google por "MSVC 9 x64 Redist" e você encontrará:

http://www.microsoft.com/downloads/en/details.aspx?familyid=bd2a6171-e2d6-4230-b809-9a8d7548c1b6&displaylang=en

São as bibliotecas que implementam as funções da biblioteca padrão C e C ++. Funções padrão, como printf são implementados nessas bibliotecas.

As bibliotecas principais do Windows fornecem apenas interfaces para chamadas do sistema, ou seja, o API WIN32, já que isso é tudo o que você precisa para criar um aplicativo Windows completo. As bibliotecas VC ++ são principalmente embalagens em torno desta API e são análogas ao glibc Biblioteca no Linux.

Como um exemplo, malloc Da biblioteca C, por sua vez, pode usar o VirtualAlloc API para alocar memória.

Os programas compilados com C ++ visual requerem um "tempo de execução" - esse é um pouco de código que lida com a inicialização/desligamento do aplicativo, alocação de memória/desalocação, suporte para leitura e escrita, etc.

Isso não faz parte do sistema operacional e não faz parte do aplicativo final - porque todos os aplicativos C ++ podem compartilhá -lo, por padrão, o tempo de execução é uma instalação separada.

Além disso, cada versão do Visual C ++ possui seu próprio instalador de tempo de execução, porque a cada versão existem pequenas diferenças e melhorias na maneira como tudo isso funciona. Também existem diferentes verisões do tempo de execução para diferentes plataformas (por exemplo, x86 e x64)

Portanto, existem vários downloads do "Visual Studio XXXX RunTime Installer (AAYY)" disponíveis na Microsoft, onde o XXXX é a versão do Visual Studio (2005, 2008, 2010, etc.), e Aaa é geralmente "x86" ou "x64 ".

A maioria dos aplicativos que precisam do tempo de execução o instalará automaticamente, se necessário; portanto, geralmente os usuários finais não estão muito cientes desses redistribuíveis.

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