【神经网络与深度学习】【CUDA开发】caffe-windows win32下的编译尝试

标签:【神经网络与深度学习】 【CUDA开发】


主要是在开发Qt的应用程序时,需要的是有一个使用的库文件也只是win32,死活找不到x64的库,对是gnuwin32,没有找到gnuwin64,也是哭了,于是想着是不是能够将Caffe按照win32的配置进行重新编译一番。结果可想而知,遇到了一堆的问题,很伤心,最后也没有解决,不,最后是完全将cuDNN和CUDA全部去掉后才成功的,因为cuDNN没有找到所谓的Win32的库,而CUDA7.5中Win32的库不全,于是编译的时候爆出找不到cublas.lib的错误,或者打不开的错误。真的很奇怪,CUDA和cuDNN居然对Win32的支持这么弱!没想到!


<1> 将visual studio 2013的增加Win32的配置

新建配置Win32,然后全部改为Win32,尝试编译一下,爆出一大堆错误;

<2> 首先得配置工程文件,模仿.vcxproj工程文件中的x64的配置方式,对Win32进行配置

通常Release版本和Debug版本都已经按照platform宏可以自动识别,但是x64和win32好像没有。配置完毕后运行一下,看看少了哪些库文件。因为刚开始配置的时候大部分下载的NuGet包肯定是支持x64的库的,但是Win32的就不一定有了。通常观察,OpenCV和glag两个里面没有Win32的库,所以,尝试着在Win32状态下重新卸载NuGet包,然后再 安装,看看会不会将对应的Win32的库下载下来,结果是可以的!

<3> 关于cuDNN的32bit库

通过在NVIDA官网上寻找cudnn的下载,始终没有找到Win32版本的,不管是cuDNNv4,v5等都只有x64的库,于是只能从工程配置中将cuDNN设置为false了,不使用cudnn。

<4> 关于CUDA的32bit库

刚开始去到cuda toolkit中找到了win32的库,但是相比x64的库,少了许多,当时就在网上查看相关的说明,说是cuda对64位的支持要远多于32bit的支持,但当时还是硬着头皮试着设置工程为使用cuda,结果爆出了一大堆关于cublas.lib等库找不到、打不开的错误,进入toolkit的win32库中查看,确实没有这个库,而在x64的库中却有。这一下就坚定了我的决心,编译32bit的Caffe,不能使用cuda了,于是将cuda的支持去掉,重新编译,在排除了几个问题之后就成功的生成了libcaffe,然后用classification进行了测试,可以完成预测分类。当然这个时候还只是在release版本下。

<5> win32-debug版本下的编译问题

切换到win32-debug下进行编译,出现了让我十分头疼的问题,就是leveldb库出现问题了,就是在链接的时候,有些函数找不到,我进入到leveldb的目录下查看发现是有Win32/debug版本的,可是好像链接器并没有识别这家伙似的。

13>db.obj : error LNK2019: 无法解析的外部符号 "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall leveldb::Status::ToString(void)const " (?ToString@Status@leveldb@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ),该符号在函数 "public: virtual void __thiscall caffe::db::LevelDBTransaction::Commit(void)" (?Commit@LevelDBTransaction@db@caffe@@UAEXXZ) 中被引用
13>db_leveldb.obj : error LNK2001: 无法解析的外部符号 "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall leveldb::Status::ToString(void)const " (?ToString@Status@leveldb@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
13>db.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall leveldb::WriteBatch::WriteBatch(void)" (??0WriteBatch@leveldb@@QAE@XZ),该符号在函数 "public: __thiscall caffe::db::LevelDBTransaction::LevelDBTransaction(class leveldb::DB *)" (??0LevelDBTransaction@db@caffe@@QAE@PAVDB@leveldb@@@Z) 中被引用
13>db.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall leveldb::WriteBatch::~WriteBatch(void)" (??1WriteBatch@leveldb@@QAE@XZ),该符号在函数 __unwindfunclet$??0LevelDBTransaction@db@caffe@@QAE@PAVDB@leveldb@@@Z$1 中被引用
13>db.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall leveldb::WriteBatch::Put(class leveldb::Slice const &,class leveldb::Slice const &)" (?Put@WriteBatch@leveldb@@QAEXABVSlice@2@0@Z),该符号在函数 "public: virtual void __thiscall caffe::db::LevelDBTransaction::Put(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?Put@LevelDBTransaction@db@caffe@@UAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@0@Z) 中被引用
13>db_leveldb.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall leveldb::Options::Options(void)" (??0Options@leveldb@@QAE@XZ),该符号在函数 "public: virtual void __thiscall caffe::db::LevelDB::Open(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,enum caffe::db::Mode)" (?Open@LevelDB@db@caffe@@UAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@W4Mode@23@@Z) 中被引用
13>db_leveldb.obj : error LNK2019: 无法解析的外部符号 "public: static class leveldb::Status __cdecl leveldb::DB::Open(struct leveldb::Options const &,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class leveldb::DB * *)" (?Open@DB@leveldb@@SA?AVStatus@2@ABUOptions@2@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAPAV12@@Z),该符号在函数 "public: virtual void __thiscall caffe::db::LevelDB::Open(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,enum caffe::db::Mode)" (?Open@LevelDB@db@caffe@@UAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@W4Mode@23@@Z) 中被引用

尝试了好几种办法,仍然无法排除,想着就放弃了。其实生成了Release版本的之后在使用的时候已经可以了,只不过只能对应Release版本的配置,改成Debug版本就出现一堆编译问题:

libcaffe.lib(softmax_loss_layer.obj):-1: error: LNK2038: 检测到“RuntimeLibrary”的不匹配项:  值“MD_DynamicRelease”不匹配值“MDd_DynamicDebug”(main.obj 中)

总之是调试版本与发行版本中的冲突,连编译都通不过!尼玛,还是算了,有一个版本就能用了,不要纠结完美实现了。


小结:

通过此次的Caffe各种环境下的编译,让我对x64、Win32以及Qt、比较新的Visual studio 2015中的各种配置的理解稍微有些提升,另外就是为了实现这些功能,我反复安装了一共3个版本的Qt,从Qt-win32-msvc2015,到Qt-x64-msvc2013,Qt-win32-msvc2013,然后visual studio安装了2013版本和2015版本,特别需要指出的CUDA的toolkit居然不支持visual studio 2015,所以为了配合我将版本回滚到2013,然后再对caffe进行配置就比较顺心了。


2016-9-18 11:37

张朋艺 pyZhangBIT2010@126.com

【神经网络与深度学习】【CUDA开发】caffe-windows win32下的编译尝试的更多相关文章

  1. 【神经网络与深度学习】转-caffe安装吐血总结

    这周安装了caffe的windows版本和Linux版本,依赖关系太多,如果系统选对了,安装起来很easy,选错了,就会遇见各种坑. 1.操作系统最好使用ubuntu desktop 14.04 64 ...

  2. 【神经网络与深度学习】在Windows8.1上用VS2013编译Caffe并训练和分类自己的图片

    最近想熟悉一下深度学习,体验了一下Caffe,简单写写训练和分类的过程: 1.下载Caffe VS2013工程:https://github.com/Microsoft/caffe 2. 解压并用VS ...

  3. 【神经网络与深度学习】【CUDA开发】【VS开发】Caffe+VS2013+CUDA7.5+cuDNN配置过程说明

    [神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置过程说明 标签:[Qt开发] 说明:这个工具在Windows上的配置真的是让我纠结万分,大部分 ...

  4. 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程

    [神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置成功后的第一次训练过程记录<二> 标签:[神经网络与深度学习] [CUDA开发] ...

  5. 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程

    [神经网络与深度学习][python开发]caffe-windows使能python接口使用draw_net.py绘制网络结构图过程 标签:[神经网络与深度学习] [python开发] 主要是想用py ...

  6. 【神经网络与深度学习】【Matlab开发】caffe-windows使能Matlab2015b接口

    [神经网络与深度学习][Matlab开发]caffe-windows使能Matlab2015b接口 标签:[神经网络与深度学习] [Matlab开发] 主要是想全部来一次,所以使能了Matlab的接口 ...

  7. [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...

  8. (转)神经网络和深度学习简史(第一部分):从感知机到BP算法

    深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...

  9. 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】

    [中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...

随机推荐

  1. DevExpress实现为TextEdit设置水印文字的方法

    设置水印与消除水印 public static void SetWatermark(TextEdit textEdit, string watermark) { textEdit.Properties ...

  2. pymysql操作数据库、索引、慢日志管理

    目录 pymysql操作数据库 简单操作 sql的注入问题 sql注入问题解决办法 sql注入问题模板总结 利用pymysql操作数据库 (增删改),conn.commit() 索引 1.为何要有索引 ...

  3. 如何在输入命令行npm run dev 之后vue项目自动在浏览器打开

    使用代码编辑器打开vue项目代码,在config文件夹里面找到index.js 将里面的:autoOpenBrowser: false, 修改为 :autoOpenBrowser: true, 这个方 ...

  4. .net post 字符串含有+号的时候,加号会变成空格 处理方法

    value= value.Replace("+", "%2B");  替换加号

  5. Cobbler自动装机

    preface 我们之前批量安装操作系统的时候都是采用pxe来安装,pxe也是通过网络安装操作系统的,但是PXE依赖于DHCP,HTTP/TFTP,kicstart等支持.安装流程如下所示: 对于上面 ...

  6. maven项目创6 表现层整合

    springmvc.xm创建l 和 web.xml配置    ,报错先不管 springmvc.xml com.taotao.controller   空包 其中    资源映射   是等 web.x ...

  7. 【杂题】[AGC034D] Manhattan Max Matching【费用流】

    Description 有一个无限大的平面,有2N个位置上面有若干个球(可能重复),其中N个位置是红球,N个位置是蓝球,红球与蓝球的总数均为S. 给出2N个位置和上面的球数,现要将红球与蓝球完美匹配, ...

  8. Miller Rabin 算法简介

    0.1 一些闲话 最近一次更新是在2019年11月12日.之前的文章有很多问题:当我把我的代码交到LOJ上,发现只有60多分.我调了一个晚上,尝试用{2, 3, 5, 7, 11, 13, 17, 1 ...

  9. [洛谷P5361][SDOI2019]热闹又尴尬的聚会:构造题

    分析 构造方法 (截图自UOJ群) 可以使用std::set维护这个过程,不过据说可以做到\(O(n+m)\).. 正确性证明 题目中的要求等价于\((p+1)(q+1) > n\) 设每次找出 ...

  10. 14.Python bytes类型及用法

    Python 3 新增了 bytes 类型,用于代表字节串(这是本教程创造的一个词,用来和字符串对应).字符串(str)由多个字符组成,以字符为单位进行操作:字节串(bytes)由多个字节组成,以字节 ...