Domanda

Sto usando VS2008 per lo sviluppo di una dll COM che di default utilizza CRT versione 9 ma sto usando TSF (quadro servizio di testo) che non è compatibile con la nuova CRT. Penso che la soluzione è quella di utilizzare quello compatibile così come posso specificare la versione CRT?

È stato utile?

Soluzione

I intero cuore unisco la raccomandazione non per cambiare manualmente la versione CRT si collega contro. Se, tuttavia, per qualche motivo (che non riesco a immaginare) questo è il corso giusto di azione per voi, il modo per farlo è cambiare il manifesti per il vostro progetto.

Per prima cosa assicurarsi che una palese è non generato su ogni build (il VS2005: proprietà di configurazione / file di Linker / manifesto / Genera manifesto), in quanto sarebbe sovrascrivere le modifiche manuali. Assicurarsi inoltre che l'isolamento non è abilitato. Quindi, individuare il file manifesto - dovrebbe essere al $ (IntDir) (per esempio, di debug). Si dovrebbe vedere una sezione simile a -

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

(per build di debug, ovviamente). È necessario modificare la versione e publicKeyToken attributi dell'elemento CRT. È possibile esaminare i file alla cartella Windows \ WinSxS locale per vedere le versioni disponibili. Controllare qui come estrarre il publicKeyToken una volta trovato la versione che si desidera. (Anche se mi piacerebbe prima cercare di guardare direttamente in manifesti di altri progetti, che collega contro la versione CRT desiderato).

Se ci andate, aspettare qualche acqua di massima. Si può avere un po 'di fortuna se l'applicazione è una console app che non collegano con altri componenti Side-by-Side (MFC, OpenMP, etc.). Se l'applicazione non è banale, sarei sorpreso se non ci sono alcuni intricati dipendenze di versione Amont i componenti SxS.

(edit) Faresti inoltre necessario distribuire con l'applicazione CRT specifica che si sta utilizzando. Ecco qualcuno che ha fatto questo.

Altri suggerimenti

Il modo più semplice è quello di costruire la DLL con la versione di VC ++ che utilizza il CRT che è compatibile con TFS.

Non credo che sia una buona idea solo per collegare la DLL con una versione diversa del tubo catodico, a meno che non si utilizza anche la stessa versione dei file di intestazione. E il modo più semplice per farlo è quello di utilizzare la giusta versione di VC ++ ...

Se avete ancora voglia di provare, è possibile:

  • andare a "Configurazione Impostazioni-> Linker-> INPUT-> Ignora libreria specifica" e inserire il tubo catodico che si sta utilizzando (libc.lib, LIBCMT.LIB, ecc vedere questo progetto codice articolo per i dettagli).
  • Inserisci il nome della versione CRT che si desidera utilizzare in "Configurazione Impostazioni-> Linker->> INPUT- dipendenze aggiuntive", e il suo percorso in "Configurazione Impostazioni-> Linker-> Generale-> Ulteriori directory di libreria".

Si può anche provare a cambiare le directory di default in "Strumenti> Opzioni> Progetti e cura-> VC ++ Directories> file di libreria". Forse cambiano $ (VCInstallDir) lib al percorso in cui si sono altre versioni del risiede CRT farà il trucco

Non cercare di utilizzare VS9 e collegamento a un'altra versione del CRT.

Se avete bisogno della vostra applicazione per creare un collegamento ad un altro CRT, dicono CRT VS8, allora è necessario compilare e collegare la tua applicazione in quella versione di VS.

La soluzione ha funzionato per me con Visual Studio Express 2013 x64 + x64 OpenCV 2.4.9 compilato, debug (ho integrato che in LV2013 x64), ma dovrebbe funzionare per qualsiasi altro VS-version:

1) Fare clic destro sul vostro Soluzione> Proprietà> file di origine di debug ...

2) Ci sono forse due interi (a seconda del VS-directory-installazione) ... 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

Con questi avrebbe funzionato per Visual Studio 2013 Express, ma dovrebbe funzionare anche per altri 2013. Se hai Visual Studio 10 o 11 basta digitare "Microsoft Visual Studio 11.0" o 10.0 in ciascuno. È anche possibile aggiungerli.

Queste voci si possono ottenere dal vostro OpenCV.sln sotto Soluzione> Proprietà> file di origine di debug (come descritto sopra). E come già misura descritto:. CRT deve corrispondere ... e questo accade in quel luogo

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