2010-11-15 3 views
5

Non ho trovato la risposta a questa domanda probabilmente semplice. Ho avuto problemi a far funzionare OpenCV sul mio computer sia con Dev C++ che con VS 2010.OpenCV VS 2010 C++ CMake

La mia domanda non riguarda le specifiche, ma piuttosto riguarda ciò che CMake contribuisce al processo.

Ho lavorato su molti programmi C++, imparando la lingua. Tuttavia, li ho scritti e li ho compilati, senza problemi, direttamente su Dev C++ usando lo standard include, ecc.

Ora io sono venuto per provare a usare il mio primo gruppo di librerie di terze parti, c'è questo enorme processo di scaricare un eseguibile, usando CMake, quindi compilare con uno degli IDE. Per me, non c'è da meravigliarsi se qualcosa va storto. Troppi passaggi e per quale scopo?

Ok, quindi sono ingenuo e semplice sulla programmazione. Quindi ecco le mie domande:

Perché c'è un file eseguibile se devi fare tre passaggi in seguito? Capisco se gli autori non hanno idea di cosa stia utilizzando il compilatore; ma perché non basta un semplice set di codici sorgente e si può fare con esso?

Tuttavia, se esiste un file specifico per VS 2010, perché non impostarlo esattamente come funzionerà sul computer ?, allo stesso modo in cui tutti scaricano VS 2010 nello stesso formato e poi si installa da solo?

Infine, anche se è necessaria una sorta di programma di installazione per creare una struttura di directory (che ancora non capisco dato che Zip, tar, ecc. Funziona bene), perché c'è bisogno di CMake?

Non mi dispiace essere deriso per essere stupido e mancare alcuni punti ovvi, ma mi piacerebbe non dover guadare attraverso brevi repliche: può sembrare semplice per voi, ma dall'esterno, non lo fa ha molto senso Grazie in anticipo, john


Grazie. Immagino di non capire abbastanza i dettagli del processo per capire perché è necessario. O meglio, capisco: ci sono diversi sistemi operativi e diversi compilatori, ma anche se la codifica è diversa per ognuno, CMake comprende i compilatori che ha elencato e quindi uno sviluppatore deve solo capire come scrivere per CMake. Se CMake non comprende l'ambiente o il compilatore, gli autori della libreria o lo sviluppatore devono capire come portarlo in quel particolare ambiente. Tuttavia, non riesco ancora a capire perché, nel caso di VS 2010, poiché OpenCV ha già in mente un particolare compilatore, CMake è necessario. Tuttavia, lo lascerò solo per il momento e andrò avanti.

Grazie ancora.


Penso di aver bisogno di aggiungere un commento. In risposta alla domanda "È davvero così tanto di un problema?" Penso che la risposta debba essere sì. Ho sprecato quasi una settimana cercando di far funzionare OpenCV con VS 2010.

Nessuno, dai siti Web di Microsoft ai blog indipendenti è stato in grado di aiutarmi. Ho attraversato sxstrace, ecc. E ho provato tutto ciò che qualcuno ha suggerito. Alla fine è lo stesso problema.

Quindi sì, è davvero un problema. non sto cercando di imparare la programmazione di Windows in questo momento. Né voglio imparare le complessità di CMake in questo momento. I programmi .exe che installano per windows hanno sempre funzionato per me. Sono sicuro che ci sono delle eccezioni ma personalmente non ci sono. Quindi se OpenCV sta pubblicando uno speciale 2008.versione exe, perché non farlo funzionare fino in fondo.


A proposito, ecco l'output del file di testo sxstrace:

Inizio Generazione contesto di Attivazione. Parametro di ingresso: Flags = 0 ProcessorArchitecture = x86 CultureFallBacks = it-IT, ma ManifestPath = C: \ Windows \ system32 \ cxcore210d.dll AssemblyDirectory = C: \ Windows \ System32 \ Config File Application =

INFORMAZIONI: analisi del file manifesto C: \ Windows \ system32 \ cxcore210d.dll in corso. INFORMAZIONI: l'identità di definizione del manifesto è (null). INFORMAZIONI: riferimento: Microsoft.VC90.DebugCRT, processorArchitecture = "x86", publicKeyToken = "1fc8b3b9a1e18e3b", type = "win32", version = "9.0.21022.8" INFORMAZIONI: risoluzione del riferimento Microsoft.VC90.DebugCRT, processorArchitecture = "x86", publicKeyToken = "1fc8b3b9a1e18e3b", type = "win32", version = "9.0.21022.8" in corso. INFORMAZIONI: risoluzione del riferimento per ProcessorArchitecture x86 in corso. INFORMAZIONI: Risoluzione del riferimento per lingua Neutrale in corso. INFORMAZIONI: applicazione dei criteri di binding in corso. INFORMAZIONI: criteri di autore non trovati. INFORMAZIONI: reindirizzamento criteri di binding non trovato. INFORMAZIONI: all'avvio dell'assembly assembly. INFORMAZIONI: assembly non trovato in WinSxS. INFORMAZIONI: prova di esecuzione del probe del manifesto in C: \ Windows \ assembly \ GAC_32 \ Microsoft.VC90.DebugCRT \ 9.0.21022.8__1fc8b3b9a1e18e3b \ Microsoft.VC90.DebugCRT.DLL. INFORMAZIONI: tentativo di esecuzione del probe del manifesto in C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT.DLL. INFORMAZIONI: tentativo di esecuzione del probe del manifesto in C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT.MANIFEST. INFORMAZIONI: tentativo di esecuzione del probe del manifesto in C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT \ Microsoft.VC90.DebugCRT.DLL. INFORMAZIONI: tentativo di esecuzione del test del manifesto in C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT \ Microsoft.VC90.DebugCRT.MANIFEST. INFORMAZIONI: manifesto non trovato per la lingua Neutrale. INFORMAZIONI: fine del probe assembly. INFORMAZIONI: impossibile risolvere il riferimento Microsoft.VC90.DebugCRT, processorArchitecture = "x86", publicKeyToken = "1fc8b3b9a1e18e3b", type = "win32", version = "9.0.21022.8". ERRORE: generazione del contesto di attivazione non riuscita. Fine generazione contesto di attivazione.

Ecco l'output di debug .

'Ciao Sabato Night.exe': Loaded 'C: \ Users \ Jake \ Documenti \ Visual Studio 2010 \ Projects \ Ciao Sabato Sera \ Debug \ Ciao Sabato Night.exe', simboli caricati. 'Hello Saturday Night.exe': caricato 'C: \ Windows \ System32 \ ntdll.dll', Simboli caricati (informazioni sull'origine rimosse). 'Hello Saturday Night.exe': caricato 'C: \ Windows \ System32 \ kernel32.dll', simboli caricati (informazioni sull'origine rimosse). 'Hello Saturday Night.exe': caricato 'C: \ Windows \ System32 \ cxcore210d.dll ', Impossibile trovare o aprire il file PDB Debugger :: Un'eccezione non continuativa non gestita è stata generata durante il caricamento del processo Il thread' Thread Win32 (0x1140) è stato chiuso con il codice -1072365566 (0xc0150002). Il thread 'Thread Win32 (0xf1c) è terminato con il codice -1072365566 (0xc0150002). Il programma '[3688] Hello Saturday Night.exe: Native' è terminato con il codice -1072365566 (0xc0150002).

risposta

5

Penso che potresti fraintendere chi è maggiormente interessato a CMake. Sono gli autori delle biblioteche, e per una buona ragione. Quando si crea una libreria multipiattaforma, è necessario fornire ambienti di compilazione per i diversi sistemi operativi e compilatori. Ci sono alcune combinazioni. Mantenere questi make-file e progetti/soluzioni per progetti di librerie di grandi dimensioni è un'attività laboriosa, specialmente se è stato aggiunto o rimosso un nuovo file.

CMake ci toglie il dolore. Genera una build in modalità indipendente dal compilatore , consentendo agli autori del codice sorgente di mantenere un singolo ambiente di generazione. Ora il progetto può essere distribuito facilmente su piattaforme e compilatori.

Quindi sì, è un passo in più per lo sviluppatore che usa la libreria, ma devi solo costruirlo una volta per rilascio, è davvero un gran problema?

+1

+1 - Anche CMake avvantaggia gli sviluppatori di applicazioni, incidentalmente (cosa accadrebbe se non si preoccupassero di compilare i binari per la propria piattaforma specifica?). Sembra un dolore (mi sono lamentato in passato esattamente nello stesso modo dell'OP), fino al punto in cui la portabilità diventa una considerazione importante per te. Poi improvvisamente capisci perché è utile :) –

+0

@sgolodetz, buon punto. Ho modificato leggermente il testo. –

0

In aggiunta a tutto ciò che Moo-Juice ha detto, se si desidera una soluzione di visione artificiale facile per VS, mi raccomando altamente EmguCV. È OpenCV in un wrapper C#. No Crea file e in generale molto più facile da gestire, soprattutto se sei un principiante.