2010-11-15 15 views
5

no pude encontrar la respuesta a esta pregunta probablemente sencilla. He estado teniendo problemas para conseguir OpenCV para trabajar en mi equipo, ya sea con Dev C++ o VS 2010.OpenCV VS 2010 C++ CMake

Mi pregunta no es acerca de los detalles, sino que se trata de lo CMake contribuye al proceso.

He trabajado mi camino a través de una gran cantidad de programas en C++, el aprendizaje de la lengua. Sin embargo, los escribí y los compilé, sin complicaciones, directamente en Dev C++ usando el estándar incluye, etc.

Ahora wehn Vengo a tratar de usar mi primer conjunto de bibliotecas de terceros, existe este gran proceso de descargando un ejecutable, usando CMake, luego compilando con uno de los IDEs. Para mí, no es de extrañar que la cosa vaya mal. Demasiados pasos y con qué propósito?

Ok, así que soy ingenua y sencilla acerca de la programación. Así que aquí están mis preguntas:

¿Por qué hay un ejecutable si tiene que hacer tres pasos después? En cierto modo, entiendo si los escritores no tienen idea de qué compilador utilizan todos; pero ¿por qué no solo un simple conjunto de códigos fuente y hacerse con él?

Sin embargo, si hay un archivo específico para VS 2010, ¿por qué no tenerlo se erige exactamente la forma en que va a funcionar en el equipo ?, la misma manera que todo el mundo descargas VS 2010 en el mismo formato y luego se se instala solo?

Finalmente, incluso si se necesita algún tipo de instalador para crear la estructura de directorios (que todavía no entiendo, ya que Zip, tar, etc. funcionan bien), ¿por qué hay una necesidad de CMake?

No me importa que se burlen de mí por ser estúpido y me faltan algunos puntos obvios, pero agradecería no tener que pasar por las réplicas rápidas: puede parecer sencillo para todos ustedes, pero desde el exterior, no lo hace tiene mucho sentido. Gracias de antemano, john


Gracias. Supongo que no entiendo lo suficiente sobre los detalles del proceso para entender por qué es necesario. O más bien, entiendo por qué: hay diferentes sistemas operativos y compiladores diferentes, pero a pesar de que la codificación es diferente para cada uno, CMake comprende los compiladores que ha enumerado y, por lo tanto, un desarrollador solo necesita averiguar cómo escribir para CMake. Si CMake no comprende el entorno o el compilador, los autores de la biblioteca o el desarrollador deben descubrir cómo trasladarlo a ese entorno particular. Sin embargo, todavía no entiendo por qué para el caso de VS 2010, dado que OpenCV ya tiene un compilador particular en mente, ese CMake es necesario. Sin embargo, lo dejaré solo por el momento y seguiré adelante.

Gracias de nuevo.


Creo que necesito añadir un comentario. En respuesta a la pregunta "¿Es realmente un gran problema?" Creo que la respuesta debe ser sí. He perdido casi una semana tratando de conseguir OpenCV para trabajar con VS 2010.

Nadie, desde los sitios web de Microsoft a los blogs independientes ha sido capaz de ayudarme. He pasado por sxstrace, etc. e intenté con todo lo que alguien sugirió. Al final es el mismo problema.

Así que sí que realmente es un problema. No estoy tratando de aprender la programación de Windows en este momento. Tampoco quiero aprender las complejidades de CMake en este momento. Los programas .exe que instalan para Windows siempre me funcionaron. Estoy seguro de que hay excepciones, pero personalmente no las hay. Entonces, si OpenCV está lanzando un especial 2008.versión exe, ¿por qué no solo hacer que funcione todo el camino?


Por cierto, aquí está la salida del archivo de texto sxstrace:

Inizio generazione contesto di attivazione. Parametro di entrada: Banderas = 0 ProcessorArchitecture = x86 CultureFallBacks = es-ES, sino que ManifestPath = C: \ Windows \ system32 \ cxcore210d.dll AssemblyDirectory = C: \ Windows \ system32 \ Aplicación archivo de configuración =

INFORMAZIONI: análisis del archivo manifiesto C: \ Windows \ system32 \ cxcore210d.dll en 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", tipo = "win32", versión = "9.0.21022.8" en corso. INFORMAZIONI: risoluzione del riferimento por ProcessorArchitecture x86 in corso. INFORMAZIONI: risoluzione del riferimento per la lingua Neutral in corso. INFORMAZIONI: application of criteri di binding in corso. INFORMAZIONI: criteri di autore non trovati. INFORMAZIONI: reindirizzamento criteri di binding non trovato. INFORMAZIONI: inizio dell'esecuzione del probe dell'assembly. INFORMAZIONI: assembly non trovato en WinSxS. INFORMAZIONI: tentativo di esecuzione del probe del manifesto en 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 en C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT.DLL. INFORMAZIONI: tentativo di esecuzione del probe del manifesto en C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT.MANIFEST. INFORMAZIONI: tentativo di esecuzione del probe del manifiesto en C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT \ Microsoft.VC90.DebugCRT.DLL. INFORMAZIONI: tentativo di esecuzione del probe del manifesto en C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT \ Microsoft.VC90.DebugCRT.MANIFEST. INFORMAZIONI: manifiesto non trovato per la lingua Neutral. INFORMAZIONI: fine dell'esecuzione del probe dell'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.

Aquí está la salida de depuración .

'Hola Sábado Night.exe': Cargado 'C: \ Users \ Jake \ Documents \ Visual Studio 2010 \ Projects \ Hola sábado por la noche \ Debug \ Hola Sábado Night.exe', símbolos cargados. 'Hello Saturday Night.exe': cargado 'C: \ Windows \ System32 \ ntdll.dll', símbolos cargados (información de origen eliminada). 'Hello Saturday Night.exe': cargado 'C: \ Windows \ System32 \ kernel32.dll', símbolos cargados (información de origen eliminada). 'Hello Saturday Night.exe': cargado 'C: \ Windows \ System32 \ cxcore210d.dll ', No se puede encontrar o abrir el archivo PDB Depurador :: Se lanzó una excepción no continua no controlada durante la carga del proceso El hilo' Win32 Thread '(0x1140) ha salido con el código -1072365566 (0xc0150002). El hilo 'Win32 Thread' (0xf1c) ha salido con el código -1072365566 (0xc0150002). El programa '[3688] Hello Saturday Night.exe: Native' ha salido con el código -1072365566 (0xc0150002).

Respuesta

5

Creo que es posible que no comprenda a quién beneficia CMake. Son los autores de la biblioteca, y por buenas razones. Cuando está creando una biblioteca multiplataforma, debe proporcionar entornos de compilación para los diferentes sistemas operativos y compiladores. Hay bastantes combinaciones. El mantenimiento de estos make-files y proyectos/soluciones para grandes proyectos de biblioteca es una tarea que requiere mucha mano de obra, especialmente si se ha agregado o eliminado un archivo nuevo.

CMake le quita el dolor a esto. Genera una compilación en compilador-independiente-manera, lo que permite a los autores del código fuente mantener un único entorno de compilación. Ahora el proyecto se puede distribuir entre plataformas y compiladores fácilmente.

Así que sí, es un paso adicional para el desarrollador que usa la biblioteca, pero solo tiene que compilarlo una vez por versión, ¿es eso realmente un problema?

+1

+1 - CMake también beneficia a los desarrolladores de aplicaciones, por cierto (¿y si no se molestaron en construir binarios para su plataforma específica?). Parece un dolor (me he quejado en el pasado exactamente del mismo modo que el OP), hasta el punto en que la portabilidad se convierte en una consideración importante para ti. Entonces, de repente, te das cuenta de por qué es útil :) –

+0

@sgolodetz, buen punto. He modificado el texto un poco. –

0

Además de todo lo que dijo Moo-Juice, si desea una solución de visión por computadora fácil para VS, le recomiendo encarecidamente EmguCV. Es OpenCV en un contenedor C#. No Make file y, en general, mucho más fácil de manejar, especialmente si eres un novato.