zoukankan      html  css  js  c++  java
  • 对OpenCV学习笔记(1)遗留问题的思考

    上篇的最后,留下了一下疑问,为什么明明是在X64系统下,却不能使用“*opencvuildx64vc11”下的库,而只能用“*opencvuildx86vc11”下的库?

    今天思考了一下,可能与以下几点有关:

    1.操作系统是64位的,开发环境是64位的,所选编译器是否是64位的?VS2012下面至少有两个可选的编译器,一个是win32编译器,一个是x64编译器(在某些安装选项下甚至可能未安装x64编译器,请安装之),我们在配置的时候选用的是哪一个编译器?

    2.如果已选择64位编译器,在链接器的高级选项中,是否设置“目标计算机”为“x64”架构,请看图。

    3.所使用的opencv库(*.dll,*.lib)是用32位系统编译的还是用64位系统编译的?如果断定所使用的库是32位的,而opencv的目录下又找不到64位的库的话(最新的2.4.7版貌似分别编译了32位版和64位版并分别放置于*uildx86和*uildx64下,老版本的未知),则需要自己重新编译64位的库。注意环境变量的设置,这将直接决定你选用的库是什么版本的。

    ---------------------------------------------------------------------------------------------------------------------

    现在,我的opencv2.4.7在win8 64bit+VS2012 64bit下使用64位库(x64vc11)已经可以完美运行了,将方法记录如下,算是对上篇的补充:

    1.打开“配置管理器”,点击“平台”旁边的箭头,选择“新建”,如果你已经安装了64位的编译器,那么在弹出的对话框中就可以创建新的“x64”平台,创建完成后,将“活动解决方案平台”选为“x64”。

    2.打开“属性管理器”,可以看到其中多了两个新的属性页,

    展开“Debug|Win32”和“Debug|x64”,比较他们的第一个属性表(称之为全局属性表),可以看到一个标明了“Win32”,一个标明了“x64”。在这里,我们采用Global Method,对“Microsoft.Cpp.x64.user”按照上篇设置"Microsoft.Cpp.Win32.user"的方法进行设置。

    3.双击“Microsoft.Cpp.x64.user”,弹出属性页,三步走设置其属性:“附加包含目录”-->“附加库目录”-->“附加依赖项”。依赖项的具体内容与上篇一致。

    4.更改环境变量“OPENCV_DIR”的值为“*opencvuildx64vc11”,“*”仍然是要替换为opencv的实际安装目录。

    5.选择调试平台为“x64”,finished!

    后记:

      现在返回去思考,为什么一开始无法使用“*opencvuildx64vc11”下的库呢?

      主要原因就是一开始我选择的调试平台为“Win32”(从我所配置的属性表名称“Microsoft.Cpp.Win32.user”就可以看出来),所以我一直在用32位的编译器引用64位的外部库,因此就一直报“无法解析的外部符号”,当我换了32位的外部库(“*opencvuildx86vc11”下的)后马上就编译成功了。因此,其他的配置都是没有问题的,环境变量的设置也是没有问题的,真正的问题在于,如果要使用64位的库就必须要调用64位的编译器;如果要使用32位的编译器编译,就只能引用32位的外部库。注意一一对应。

  • 相关阅读:
    ryu 下发流表配置
    openstack kolla 部署---不同的节点采用不同的物理接口
    kolla 安装
    Ubuntu add-apt-repository: command not found
    大前端发展趋势
    这些优化技巧可以避免我们在 JS 中过多的使用 IF 语句
    asap异步执行实现原理
    为什么 JS 对象内部属性遍历的顺序乱了
    你可能忽略的 async/await 问题
    深入浅出JS原型链
  • 原文地址:https://www.cnblogs.com/marcworld/p/3430975.html
Copyright © 2011-2022 走看看