Domanda

Cosa c'è nella libreria runtime di MS Visual C++?Voglio dire, ho cercato su Google e ho sempre trovato cose come aiuto, l'app xxxx mi dà un errore della libreria runtime di MS Visual C++, senza alcuna spiegazione.

Pensavo che le librerie runtime di Windows C fossero fornite con Windows?Non con VC++?Grazie.

MODIFICARE:Innanzitutto, grazie per le risposte.Penso che ora ho una cattiva idea delle librerie di runtime in Windows.Voglio dire, la prima parte, che Windows internamente ha la sua API win32 e quindi va bene, lo sapevo.Inoltre, le Win32API provengono da parti del kernel e dell'utente.

Ma ho sempre pensato che funzioni come GDI fossero accessibili come DLL (cosa che continuo a credere che lo siano).Ma pensavo che funzionasse anche come printf e così sono in alcuni file di Windows.

Quindi, ho ragione, quando so che funziona "semplice" come printf devono essere collegati direttamente e quindi utilizzare direttamente solo la parte kernel del sistema operativo e le funzioni API di Windows più sofisticate sono collegate come DLL, quindi NON SONO distribuite con il compilatore ma con il sistema operativo?E successivamente accedono al Kernel?

Voglio dire, diciamo GDI, gli dico di disegnare un'immagine, fa tutto il duro lavoro in modalità utente e poi chiama la funzione del kernel che mette tutto nel framebuffer?

E ultimo pensiero: perché è stato risolto in questo modo?Voglio dire, se il runtime VC++ è solo un livello tra C e WinAPI, perché VC++ non può chiamare direttamente WinAPI?

È stato utile?

Soluzione

Una breve risposta sarebbe che la MSVS C / C ++ e utensileria runtime funzioni come malloc / libero, stdio, iostream e qualche C ++ - roba come dynamic_cast e la gestione delle eccezioni. Questi differisce tra le versioni di Visual Studio, quindi ci sono diversi tempi di esecuzione per le versioni differenti.

nave

di Windows per lo più con un'API C (API Win32), che, piuttosto diversa dalla / C ++ libreria standard C. Il MSVS C / C ++ chiamate runtime in questa API per allocare memoria, ecc ecc.

(suppongo alcune delle applicazioni incluse in Windows sono scritti con MSVS e in C ++, in modo che non comprendono il runtime MSVS per quella versione.)

Inoltre, il tempo di esecuzione cambia come le nuove versioni di Visual Studio vengono rilasciati. Una versione di Windows dura molto più a lungo.

Altri suggerimenti

Questa è una semplificazione eccessiva, ma ti darà il succo.MSVCRT è un insieme di DLL che implementa parti del linguaggio C++.Funzioni come printf, memcpy e simili sono implementati in queste DLL.

Ogni programma compilato con un particolare compilatore e collegato dinamicamente ai runtime C++ deve in qualche modo avere la versione corretta dei file binari CRT sul computer di destinazione.Di conseguenza, le applicazioni inviate agli utenti finali vengono spesso (di solito?) fornite anche con un pacchetto di queste DLL.Questo pacchetto è chiamato "ridistribuibile" (o "redist") e ce n'è uno diverso per ogni combinazione di versione esatta del compilatore e piattaforma di destinazione.Ad esempio, esistono redist separati e distinti per ciascuno dei seguenti:

  • MSVC 10, finestre a 64 bit
  • MSVC 10, finestre a 32 bit
  • MSVC9, finestre a 64 bit
  • MSVC9 SP1, finestre a 64 bit

eccetera.

Sì, Windows di solito "viene fornito con" alcune versioni di CRT.Tuttavia, viene fornito con le versioni necessarie per eseguire le app fornite con Windows.Se Windows e tutte le sue app sono state compilate in MSVC8 SP2 e la tua app è compilata in MSVC10, CRT Voi require non sarà presente sulla confezione semplicemente perché è in esecuzione Windows.

Questo è il motivo per cui è pratica comune spedire app insieme ai redist.

MODIFICARE:

Per mezzo di Houdini, come per magia, prevedo che la tua prossima domanda sarà "dove trovo i redisti?"

La risposta è, da MicroSoft.Prova a cercare su Google "msvc 9 x64 redist" e troverai:

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

Sono le librerie che implementano il C e C ++ funzioni della libreria standard. Funzioni standard quali printf sono implementate in queste librerie.

Le librerie di base di Windows solo fornire interfacce per chiamate di sistema, cioè il Win32 API , dal momento che è tutto ciò che serve per creare un'applicazione full-optional di Windows. biblioteche Il VC ++ sono per lo più wrapper intorno questa API, e sono analoghi al glibc biblioteca su Linux.

Per fare un esempio, malloc dalla potenza libreria C in uso ruotare la ghiera VirtualAlloc API per allocare memoria.

I programmi compilati con Visual C++ richiedono un "runtime": si tratta di una porzione di codice che gestisce l'avvio/arresto dell'applicazione, l'allocazione/deallocazione della memoria, il supporto per la lettura e la scrittura di file, ecc.

Questo non fa parte del sistema operativo e non fa parte dell'applicazione finale: poiché tutte le applicazioni C++ possono condividerlo, per impostazione predefinita il runtime è un'installazione separata.

Inoltre, ogni versione di Visual C++ ha il proprio programma di installazione runtime, perché con ogni versione ci sono lievi differenze e miglioramenti nel modo in cui tutto funziona.Esistono anche diverse versioni del runtime per diverse piattaforme (ad es.x86 e x64)

Pertanto, sono disponibili numerosi download del "programma di installazione runtime di Visual Studio XXXX (YYY)" da Microsoft, dove XXXX è la versione di Visual Studio (2005, 2008, 2010, ecc.) e YYY è solitamente "x86" o "x64" ".

La maggior parte delle applicazioni che necessitano del runtime lo installeranno automaticamente se necessario, quindi generalmente gli utenti finali non sono molto consapevoli di questi ridistribuibili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top