【神经网络与深度学习】【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. LINUX装机问题:无法使用“Ctrl+Alt+[F1~F6]”快捷键切换到终端

    用VMware装LINUX虚拟机之后,你会发现在X Window的登陆界面无法使用“Ctrl+Alt+[F1~F6]”快捷键切换到终端,这是因为VMware默认的快捷键也是Ctrl+Alt,所以你只需 ...

  2. 文件操作:fseek()

    int fseek(FILE *stream, long offset, int fromwhere); fseek 用于二进制方式打开的文件,移动文件读写指针位置.   int fseek( FIL ...

  3. Confluence 6 图片文件

    当你对一个页面进行编辑的时候,选择一个图片,将会显示图片属性面板.这个面板允许你设置显示大小,添加边控和特效和链接这个图片到其他页面. 从图片的属性面板,你可以: 为以图片选择一个 显示大小(pres ...

  4. hihocoder周赛(树的最长距离)

    题目4 : 道路建设 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 H 国有 n 座城市和 n-1 条无向道路,保证每两座城市都可以通过道路互相到达.现在 H 国要开始 ...

  5. sql in条件 超过1000字符的处理方法

    private string getOracleSQLIn(string[] ids, string field) { int count = Math.Min(ids.Length, 1000); ...

  6. 我不熟悉的list

    其实在日常中,链表的题目做的比较多,但是使用STL自带链表的还是比较少,所以里面的一些API不大熟悉.这边也简要介绍一些. 基本的一些API 先列举的这些和上面几篇用法几乎一样,所以不再累述. 赋值相 ...

  7. Selenium 对元素的判断(expected_conditions)(转载)

    我们在用webdriver去操作元素时,先要判断这个元素是否存在,存在才去操作,否则就会报错. selenium的expected_conditions模块提供了一些判断方法 场景 Expected ...

  8. Compress Words

    E. Compress Words 直接套 KMP 即可(那为什么打 cf 的时候没有想到...),求出后一个单词(word)的前缀数组,然后从前面已得的字符串的末尾 - word. length ( ...

  9. HTML DOM的学习

    请看下面的 HTML 片段: <html> <head> <title>DOM 教程</title> </head> <body> ...

  10. java 手机号/身份证(*)加密隐藏中间某几位几位

    //手机号 保留前3 后4 String phone = "18771632488"; System.out.println(phone.replaceAll("(\\d ...