2010-11-15 14 views
5

Je n'ai pas trouvé de réponse à cette question probablement simple. J'ai eu des problèmes à faire fonctionner OpenCV sur mon ordinateur avec Dev C++ ou VS 2010.OpenCV VS 2010 C++ CMake

Ma question ne concerne pas les détails mais plutôt ce que CMake apporte au processus.

J'ai travaillé sur de nombreux programmes C++ en apprenant la langue. Cependant, je les ai écrits et compilés, sans problème, directement sur Dev C++ en utilisant les inclusions standard, etc.

Maintenant wehn je viens d'essayer d'utiliser mon premier ensemble de bibliothèques 3rd party, il y a ce processus énorme de télécharger un exécutable, en utilisant CMake, puis compiler avec l'un des IDE. Pour moi, il n'est pas étonnant que la chose se passe mal. Trop d'étapes et dans quel but? Ok, donc je suis naïf et simple à propos de la programmation. Donc, voici mes questions:

Pourquoi y a-t-il un exécutable si vous devez faire trois étapes après? Je comprends un peu si les auteurs n'ont aucune idée de ce que tout compilateur utilise; mais pourquoi ne pas simplement créer un ensemble de codes source et s'en servir? Cependant, s'il existe un fichier spécifique pour VS 2010, pourquoi ne pas le configurer exactement de la façon dont il fonctionnera sur l'ordinateur? De la même manière que tout le monde télécharge VS 2010 dans le même format et ensuite s'installe? Enfin, même si une sorte d'installateur est nécessaire pour créer une structure de répertoire (ce que je ne comprends toujours pas puisque Zip, tar, etc. fonctionne bien), pourquoi est-il nécessaire de créer CMake? Cela ne me dérange pas d'être ridiculisé pour être stupide et de manquer des points évidents, mais j'apprécierais de ne pas avoir à patauger dans des répliques rapides: cela peut sembler simple à tous, mais de l'extérieur, ça ne me dérange pas avoir beaucoup de sens. Merci d'avance, john


Merci. Je suppose que je ne comprends pas assez sur les détails du processus pour comprendre pourquoi cela est nécessaire. Ou plutôt, je comprends un peu: il existe différents systèmes d'exploitation et différents compilateurs, mais même si le codage est différent pour chacun, CMake comprend les compilateurs qu'il a listés et donc un développeur n'a besoin que de savoir comment écrire pour CMake. Si CMake ne comprend pas l'environnement ou le compilateur, les auteurs de la bibliothèque ou le développeur doit déterminer comment le porter dans cet environnement particulier. Cependant, je ne comprends toujours pas pourquoi dans le cas de VS 2010, puisque OpenCV a déjà un compilateur en tête, CMake est nécessaire. Cependant, je vais laisser cela de côté pour le moment et passer à autre chose.

Merci encore.


Je pense que je dois ajouter un commentaire. En réponse à la question "Est-ce vraiment un problème?" Je pense que la réponse doit être oui. J'ai gaspillé près d'une semaine à essayer de faire fonctionner OpenCV avec VS 2010.

Personne parmi les sites Web de Microsoft aux blogs indépendants n'a été capable de m'aider. J'ai traversé sxstrace, etc et essayé tout ce que quelqu'un a suggéré. En fin de compte, c'est le même problème.

Alors oui c'est vraiment un problème. Je n'essaie pas d'apprendre la programmation Windows en ce moment. Je ne veux pas non plus apprendre les complexités de CMake en ce moment. Les programmes .exe qui installent pour windows ont toujours fonctionné pour moi. Je suis sûr qu'il y a des exceptions, mais personnellement, il n'y en a pas. Donc si OpenCV sort une spéciale 2008.Exe version, pourquoi ne pas le faire fonctionner tout le chemin.


Par ailleurs, voici la sortie du fichier texte sxstrace:

Inizio generazione contesto di attivazione. Parametro entrée di: Flags = 0 ProcessorArchitecture = x86 CultureFallBacks = it-IT, il ManifestPath = C: \ Windows \ system32 \ cxcore210d.dll AssemblyDirectory = C: \ Windows \ system32 \ Config application File =

INFORMAZIONI: analisi du fichier manifeste C: \ Windows \ system32 \ cxcore210d.dll dans le corso. INFORMAZIONI: l'identification de la définition du manifeste (null). INFORMAZIONI: documentation: Microsoft.VC90.DebugCRT, processorArchitecture = "x86", publicKeyToken = "1fc8b3b9a1e18e3b", type = "win32", version = "9.0.21022.8" INFORMAZIONI: définition du fichier Microsoft.VC90.DebugCRT, processorArchitecture = "x86", publicKeyToken = "1fc8b3b9a1e18e3b", tapez = "win32", version = "9.0.21022.8" dans le corso. INFORMAZIONI: risoluzione del riferimento par ProcessorArchitecture x86 au corso. INFORMAZIONI: risoluzione del riferimento per la lingua Neutre en corso. INFORMAZIONI: application des critères de fixation au corso. INFORMAZIONI: critères d'autore non trovati. INFORMAZIONI: reindirizzamento critères de liaison non trovato. INFORMAZIONI: inizio dell'esecuzione del sonde dell'assembly. INFORMAZIONI: assembly non trovato dans WinSxS. INFORMAZIONI: tentativo di esecuzione del probe del manifeste dans C: \ Windows \ assembly \ GAC_32 \ Microsoft.VC90.DebugCRT \ 9.0.21022.8__1fc8b3b9a1e18e3b \ Microsoft.VC90.DebugCRT.DLL. INFORMAZIONI: tentativo di esecuzione del probe del manifeste dans C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT.DLL. INFORMAZIONI: tente d'analyse du manifeste dans C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT.MANIFEST. INFORMAZIONI: tentativo di esecuzione del probe del manifesto dans C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT \ Microsoft.VC90.DebugCRT.DLL. INFORMAZIONI: tentativo di esecuzione del probe del manifeste dans C: \ Windows \ system32 \ Microsoft.VC90.DebugCRT \ Microsoft.VC90.DebugCRT.MANIFEST. INFORMAZIONI: manifesto 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", tapez = "win32", version = "9.0.21022.8". ERRORE: Génération de contestation de l'activité non riuscita. Fine generazione contesto di attivazione.

Voici la sortie de débogage .

'Bonjour samedi Night.exe': Loaded 'C: \ Users \ jake \ Documents \ Visual Studio 2010 \ Projects \ Bonjour Saturday Night \ Debug \ Bonjour samedi Night.exe', symboles chargés. 'Hello Saturday Night.exe': Loaded 'C: \ Windows \ System32 \ ntdll.dll', Symboles chargés (information source supprimée). 'Hello Saturday Night.exe': Loaded 'C: \ Windows \ System32 \ kernel32.dll', Symboles chargés (information source supprimée). 'Hello Saturday Night.exe': Chargé 'C: \ Windows \ System32 \ cxcore210d.dll ', Impossible de trouver ou d'ouvrir le fichier PDB Débogueur :: Une exception non gérée non continuable a été levée pendant la charge du processus Le thread' Win32 Thread '(0x1140) s'est terminé avec le code -1072365566 (0xc0150002). Le thread 'Win32 Thread' (0xf1c) s'est terminé avec le code -1072365566 (0xc0150002). Le programme '[3688] Hello Saturday Night.exe: Native' s'est terminé avec le code -1072365566 (0xc0150002).

Répondre

5

Je pense que vous pourriez mal comprendre qui CMake bénéficie le plus. Ce sont les auteurs de la bibliothèque, et pour une bonne raison. Lorsque vous créez une bibliothèque multiplate-forme, vous devez fournir des environnements de construction pour les différents systèmes d'exploitation et compilateurs. Il y a plusieurs combinaisons. La gestion de ces fichiers de création et de projets/solutions pour les grands projets de bibliothèque est une tâche laborieuse, en particulier si un nouveau fichier a été ajouté ou supprimé.

CMake soulage la douleur. Il génère une construction de manière indépendante du compilateur , permettant aux auteurs du code source de conserver un environnement de construction unique. Maintenant, le projet peut être distribué facilement sur les plates-formes et les compilateurs.

Alors oui, c'est une étape supplémentaire pour le développeur qui utilise la bibliothèque, mais il suffit de la construire une fois par version, est-ce vraiment un problème?

+1

+1 - CMake profite également aux développeurs d'applications (et s'ils ne prenaient pas la peine de créer des binaires pour votre plate-forme spécifique?). Cela semble être une douleur (je m'en suis plaint dans le passé exactement de la même manière que le PO), jusqu'au point où la portabilité devient une considération majeure pour vous. Ensuite, vous réalisez soudainement pourquoi c'est utile :) –

+0

@sgolodetz, bon point. J'ai un peu modifié le texte. –

0

En plus de tout ce que dit Moo-Juice, si vous voulez une solution de vision par ordinateur facile pour VS, je recommande fortement EmguCV. C'est OpenCV dans un wrapper C#. Non Rendez le fichier et globalement plus facile à manipuler, surtout si vous êtes novice.