OpenCV VS 2010 C++ CMake

Posted

技术标签:

【中文标题】OpenCV VS 2010 C++ CMake【英文标题】: 【发布时间】:2010-11-15 16:31:01 【问题描述】:

我找不到这个可能很简单的问题的答案。我一直无法让 OpenCV 在我的计算机上使用 Dev C++ 或 VS 2010 工作。

我的问题不是关于细节,而是关于 CMake 对这个过程的贡献。

我学习了很多 C++ 程序,学习了这门语言。但是,我直接在 Dev C++ 上使用标准包含等编写和编译它们。

现在我开始尝试使用我的第一个第 3 方库集,下载可执行文件、使用 CMake,然后使用其中一个 IDE 进行编译,这是一个巨大的过程。对我来说,难怪事情会出错。步骤太多,目的是什么?

好的,所以我对编程很天真和简单。所以这是我的问题:

如果之后必须执行三个步骤,为什么会有可执行文件?我有点理解作者是否不知道每个人都在使用什么编译器;但为什么不只是一组简单的源代码并用它来完成呢?

但是,如果有 VS 2010 的特定文件,为什么不直接将其设置为在计算机上的工作方式?就像每个人以相同格式下载 VS 2010 然后安装一样自己?

最后,即使需要某种安装程序来创建目录结构(我仍然不明白,因为 Zip、tar 等都可以正常工作),为什么还需要 CMake?

我不介意因为愚蠢和遗漏一些明显的观点而被嘲笑,但我希望不必费力地快速反驳:这对你们来说可能看起来很简单,但从外面看,它并不能使很有意义。提前感谢,约翰


谢谢。我想我对这个过程的细节还不够了解,无法理解为什么这是必要的。或者更确切地说,我有点理解:有不同的操作系统和不同的编译器,但即使每个的编码不同,CMake 也能理解它列出的编译器,因此开发人员只需要弄清楚如何为 CMake 编写。如果 CMake 不了解环境或编译器,库作者或开发人员必须弄清楚如何将其移植到该特定环境。但是,我仍然不明白为什么对于 VS 2010 的情况,因为 OpenCV 已经考虑到特定的编译器,所以 CMake 是必要的。不过,我暂时先不管它,然后继续前进。

再次感谢。


我想我需要添加评论。回答“这真的有那么大的问题吗?”这个问题。我认为答案必须是肯定的。我已经浪费了将近一周的时间试图让 OpenCV 与 VS 2010 一起工作。

没有人能帮助我,从微软网站到独立博客。我已经通过了 sxstrace 等,并尝试了任何人建议的一切。最后还是同样的问题。

所以是的,这确实是一个问题。我现在不想学习 Windows 编程。我现在也不想学习 CMake 的复杂性。为 Windows 安装的 .exe 程序一直对我有用。我相信有例外,但个人没有。因此,如果 OpenCV 推出了一个特殊的 2008.exe 版本,为什么不让它一直工作。


顺便说一下,这里是 sxstrace 文本文件的输出:

Iniziogenerazione Competitiono di attivazione。 参数输入: 标志 = 0 处理器架构 = x86 CultureFallBacks = it-IT;it ManifestPath = C:\Windows\system32\cxcore210d.dll 装配目录 = C:\Windows\system32\ 应用程序配置文件 =

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" 信息: 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 la lingua Neutral in corso。 INFORMAZIONI: applicazione dei 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:在 WinSxS 中组装非 trovato。 INFORMAZIONI: tentativo di esecuzione del probe del manifesto 在 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 在 C:\Windows\system32\Microsoft.VC90.DebugCRT.DLL 中。 INFORMAZIONI: tentativo di esecuzione del probe del manifesto 在 C:\Windows\system32\Microsoft.VC90.DebugCRT.MANIFEST。 INFORMAZIONI: tentativo di esecuzione del probe del manifesto 在 C:\Windows\system32\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.DLL。 INFORMAZIONI: tentativo di esecuzione del probe del manifesto 在 C:\Windows\system32\Microsoft.VC90.DebugCRT\Microsoft.VC90.DebugCRT.MANIFEST。 INFORMAZIONI: manifesto non trovato per la lingua Neutral。 INFORMAZIONI: 精细 dell'esecuzione del probe dell'assembly。 信息:不可能解决 Microsoft.VC90.DebugCRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8"。 错误:generazione del Competitiono di attivazione non riuscita。 Finegenerazione Competitiono di attivazione。

这是调试输出。

'Hello Saturday Night.exe':已加载 'C:\Users\jake\Documents\Visual Studio 2010\Projects\Hello Saturday Night\Debug\Hello Saturday Night.exe',已加载符号。 'Hello Saturday Night.exe':已加载 'C:\Windows\System32\ntdll.dll',已加载符号(已删除源信息)。 'Hello Saturday Night.exe':已加载 'C:\Windows\System32\kernel32.dll',已加载符号(已删除源信息)。 'Hello Saturday Night.exe': 加载 'C:\Windows\System32\cxcore210d.dll',找不到或打开 PDB 文件 调试器:: 进程加载期间引发了未处理的不可持续异常 线程“Win32 线程”(0x1140) 已退出,代码为 -1072365566 (0xc0150002)。 线程“Win32 线程”(0xf1c) 已退出,代码为 -1072365566 (0xc0150002)。 程序“[3688] Hello Saturday Night.exe: Native”已退出,代码为 -1072365566 (0xc0150002)。

【问题讨论】:

【参考方案1】:

我认为您可能误解了 CMake 对谁的好处最大。这是图书馆的作者,这是有充分理由的。在创作跨平台库时,您需要为不同的操作系统和编译器提供构建环境。有相当多的组合。为大型库项目维护这些 make-file 和项目/解决方案是一项劳动密集型任务,尤其是在添加或删除了新文件的情况下。

CMake 解决了这个问题。它以独立于编译器的方式生成构建,允许源代码的作者维护一个单一的构建环境。现在该项目可以轻松地跨平台和编译器分发。

所以是的,对于使用该库的开发人员来说,这是一个额外的步骤,但您只需在每个版本中构建一次,这真的有那么大的问题吗?

【讨论】:

+1 -- 顺便说一句,CMake 也使应用程序开发人员受益(如果他们不费心为您的特定平台构建二进制文件怎么办?)。这似乎很痛苦(我过去曾以与 OP 完全相同的方式抱怨它),直到可移植性成为您的主要考虑因素。然后你突然意识到它为什么有用:)【参考方案2】:

除了 Moo-Juice 所说的一切,如果你想要一个简单的 VS 计算机视觉解决方案,我强烈推荐 EmguCV。它是 C# 包装器中的 OpenCV。没有 Make 文件,总体上更容易处理,尤其是如果您是新手。

【讨论】:

以上是关于OpenCV VS 2010 C++ CMake的主要内容,如果未能解决你的问题,请参考以下文章

Opencv介绍及opencv3.0在 vs2010上的配置

vs2013项目加载失败

如何在VS2013下配置OpenCV

二维码解码器Zbar+VS2010开发环境配置(使用opencv库)

之前配置过opencv 现在用vs2010 打代码每次都没法编译,求解决无法打开文件"opencv_world320.lib

请问如何在vs2010下配置opencv2.2,求详细步骤,万分感谢!