zoukankan      html  css  js  c++  java
  • caffe初试(一)happynear的caffe-windows版本的配置及遇到的问题

    之前已经配置过一次caffe环境了:

    Caffe初试(一)win7_64bit+VS2013+Opencv2.4.10+CUDA6.5配置Caffe环境

    但其中也提到,编译时,用到了cuda6.5,但是实际训练时,使用GPU训练,又会出现问题。所以强迫症使然,我决定另外配置一个cpu_only的版本,编译时,不使用cuda。

    于是网上查了查,很多小伙伴都是使用happynear配置的caffe-windows版本,并参照其博客中的步骤进行编译使用的:

    如何快糙猛地在Windows下编译CAFFE并使用其matlab和python接口

    按照博客中的方法,自己要做的事情就变得很少很少了,主要有:

    1、双击./src/caffe/proto/extract_proto.bat批处理文件来生成caffe.pb.hcaffe.pb.cc两个c++文件,和caffe_pb2.py这个Python使用的文件。

    2、打开./build_cpu_only/MainBuilder.sln ,点击编译按钮;

    原来以为只需静静等待,即可生成caffe.exe。但没想到,还是出现了问题,费了好大的劲,最终才得以解决。

    问题一:编译时,出现如下错误:


    错误 621 error LNK2001: 无法解析的外部符号 "__declspec(dllimport) void __cdecl google::ShowUsageWithFlagsRestrict(char const *,char const *)" (__imp_?ShowUsageWithFlagsRestrict@google@@YAXPEBD0@Z) F:caffe-windows-masteruild_cpu_onlyMSVCcaffe.obj caffe

    错误 622 error LNK2001: 无法解析的外部符号 "__declspec(dllimport) void __cdecl google::SetUsageMessage(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (__imp_?SetUsageMessage@google@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) F:caffe-windows-masteruild_cpu_onlyMSVCcaffe.obj caffe

    错误 623 error LNK2001: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl google::FlagRegisterer::FlagRegisterer(char const *,char const *,char const *,char const *,void *,void *)" (__imp_??0FlagRegisterer@google@@QEAA@PEBD000PEAX1@Z) F:caffe-windows-masteruild_cpu_onlyMSVCcaffe.obj caffe

    错误 624 error LNK2001: 无法解析的外部符号 "__declspec(dllimport) void __cdecl google::SetVersionString(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (__imp_?SetVersionString@google@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) F:caffe-windows-masteruild_cpu_onlyMSVCcaffe.obj caffe

    错误 625 error LNK2001: 无法解析的外部符号 "__declspec(dllimport) unsigned int __cdecl google::ParseCommandLineFlags(int *,char * * *,bool)" (__imp_?ParseCommandLineFlags@google@@YAIPEAHPEAPEAPEAD_N@Z) F:caffe-windows-masteruild_cpu_onlyMSVCcommon.obj caffe

    错误 626 error LNK1120: 5 个无法解析的外部命令 F:caffe-windows-masterincaffe.exe caffe


     

    出现的问题是:程序运行时调用了ShowUsageWithFlagsRestrictSetUsageMessage等这些个函数,但编译器找不到这些函数定义的位置,即出现“无法解析的外部符号”,这就是缺少依赖库时常出现的error。究其原因是happynear在caffe的配置环境中,没有添加libgflags.lib库。这是一个Google开源的一个库,具体用途我也不知道。

    所以只需:打开各工程属性页,在 链接器-》输入-》附加依赖项 中添加 “libgflags.lib” 即可

     

    问题二:运行run_mnist.bat,尝试使用caffe训练mnist手写字体库模型时出现如下错误:


    ** On entry to SGEMM parameter number 3 had an illegal value
    ** On entry to SGEMM parameter number 3 had an illegal value
    ** On entry to SGEMM parameter number 3 had an illegal value
    ** On entry to SGEMM parameter number 3 had an illegal value


    这不是一个常见的错误,所以上网查了很久也没找到解决的方法。后来只有自己乱试了,结果在配置环境变量时发现,我上一次使用

    Caffe初试(一)win7_64bit+VS2013+Opencv2.4.10+CUDA6.5配置Caffe环境

    配置时,发现当时第三方库下的bin路径还存在(我的是F:caffe3rdpartyin;)而这一次的配置,环境变量是放在F:caffe3rdpartyin;之后的,会不会是由于F:caffe3rdpartyin;的存在,使得该版本生成的caffe.exe在训练时出错,因为caffe.exe在运行时,是会从环境变量中找寻找需要的动态库进行链接才能顺利执行的。或许是因为F:caffe3rdpartyin;的存在,使得该版本下的caffe.exe在运行时,先从F:caffe3rdpartyin;中取动态库进行链接,而可能两个版本在配置时所用动态库有差异,不能共用,所以才导致该版本的caffe.exe在训练时,出现如上错误?

    带着疑问,我将F:caffe3rdpartyin;从环境变量中删去,并且从任务管理器中结束了explorer.exe,再重新新建任务explorer.exe(即使环境变量生效!!!)

    然后再运行run_mnist.bat,结果真的可以正常开始训练了。真是被自己的智慧所折服。- -|||

    以上。

  • 相关阅读:
    Linux系统启动过程
    Window磁盘错误修复chkdsk
    迅雷精简版-纪念走过的时光
    NTP国内时钟服务器
    完完全全彻底删除VMware_Workstation
    Linux默认日志含义
    java 生成泛型的参数的实例 T t=new T()
    dubbo源码解析-zookeeper创建节点
    dubbo服务端,dubbo客户端,注册中心(zk)之间的心跳
    Dubbo阅读笔记——高级功能
  • 原文地址:https://www.cnblogs.com/codingmengmeng/p/6231056.html
Copyright © 2011-2022 走看看