【神经网络与深度学习】【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. 前端要懂的nginx配置

    多服务接口nginx反向代理 ```js server { listen 80; server_name xx.xx.xx.com; // 前端部署的域名 root /med; index index ...

  2. nginx部署网站step by step

    安装后,修改nginx.conf,在httpd{}中添加 include /nginx/vhosts/*.conf; 如果没有vhosts就新建一个文件夹 *.conf是一种正则表达式用法,表示纳入一 ...

  3. 【GitHub】命令行操作

    提交文件 本地修改之后:git add .     提交到暂存区 commit一下:git commit -m "xxx"   -m表示信息,不填无法commit 提交到远程仓库: ...

  4. Qt:The CDB Process Terminated!调试失败

       一般是找不到DLL库导致的CDB终止.

  5. redis-cli批量删除key

    https://www.cnblogs.com/kiko2014551511/p/11531584.html redis-cli -a 密钥 keys "shiro*" | xar ...

  6. 文件操作:fopen()

    r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须存在.   rb+ 读写打开一个二进制文件,只允许读写数据. rt+ 读写打开一个文本文件,允许读和写.    w 打开只写文件, ...

  7. 翻译一篇英文文章,主要是给自己看的——在ASP.NET Core Web Api中如何刷新token

    原文地址 :https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/ 先申明,本人英语太菜,每次 ...

  8. [CSP-S模拟测试]:打表(猜测题意+结论)

    题目传送门(内部题139) 输入格式 第一行两个整数$k,ans$,表示内存地址$A$的位数,以及答案所在的内存地址. 接下来一行$2^k$个整数,分别表示内存地址$0...2^k-1$上的值. 输出 ...

  9. SpringMVC的 transferTo使用

    在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石——SpringMVC其中的一个优势.Spring通过对Servl ...

  10. 分布式-信息方式- JMS基本概念

                                              JMS基本概念 ■JMs是什么          JMS Java Messag/ Servite,Java消息服务 ...