【神经网络与深度学习】【CUDA开发】caffe-windows win32下的编译尝试
【神经网络与深度学习】【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下的编译尝试的更多相关文章
- 【神经网络与深度学习】转-caffe安装吐血总结
这周安装了caffe的windows版本和Linux版本,依赖关系太多,如果系统选对了,安装起来很easy,选错了,就会遇见各种坑. 1.操作系统最好使用ubuntu desktop 14.04 64 ...
- 【神经网络与深度学习】在Windows8.1上用VS2013编译Caffe并训练和分类自己的图片
最近想熟悉一下深度学习,体验了一下Caffe,简单写写训练和分类的过程: 1.下载Caffe VS2013工程:https://github.com/Microsoft/caffe 2. 解压并用VS ...
- 【神经网络与深度学习】【CUDA开发】【VS开发】Caffe+VS2013+CUDA7.5+cuDNN配置过程说明
[神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置过程说明 标签:[Qt开发] 说明:这个工具在Windows上的配置真的是让我纠结万分,大部分 ...
- 【神经网络与深度学习】【Qt开发】【VS开发】从caffe-windows-visual studio2013到Qt5.7使用caffemodel进行分类的移植过程
[神经网络与深度学习][CUDA开发][VS开发]Caffe+VS2013+CUDA7.5+cuDNN配置成功后的第一次训练过程记录<二> 标签:[神经网络与深度学习] [CUDA开发] ...
- 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程
[神经网络与深度学习][python开发]caffe-windows使能python接口使用draw_net.py绘制网络结构图过程 标签:[神经网络与深度学习] [python开发] 主要是想用py ...
- 【神经网络与深度学习】【Matlab开发】caffe-windows使能Matlab2015b接口
[神经网络与深度学习][Matlab开发]caffe-windows使能Matlab2015b接口 标签:[神经网络与深度学习] [Matlab开发] 主要是想全部来一次,所以使能了Matlab的接口 ...
- [DeeplearningAI笔记]神经网络与深度学习人工智能行业大师访谈
觉得有用的话,欢迎一起讨论相互学习~Follow Me 吴恩达采访Geoffrey Hinton NG:前几十年,你就已经发明了这么多神经网络和深度学习相关的概念,我其实很好奇,在这么多你发明的东西中 ...
- (转)神经网络和深度学习简史(第一部分):从感知机到BP算法
深度|神经网络和深度学习简史(第一部分):从感知机到BP算法 2016-01-23 机器之心 来自Andrey Kurenkov 作者:Andrey Kurenkov 机器之心编译出品 参与:chen ...
- 【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验【中英】
[中英][吴恩达课后测验]Course 1 - 神经网络和深度学习 - 第二周测验 第2周测验 - 神经网络基础 神经元节点计算什么? [ ]神经元节点先计算激活函数,再计算线性函数(z = Wx + ...
随机推荐
- MyEclipse使用教程——使用DevStyle Icon Designer(二)
[MyEclipse CI 2019.4.0安装包下载] DevStyle主题包括一个Icon Designer,允许您自定义图标.Icon Designer包含在DevStyle主题中,可作为Ecl ...
- java多线程之生产者消费者模型
public class ThreadCommunication{ public static void main(String[] args) { Queue q = new Queue();//创 ...
- python模块安装问题:no matching distribution found for XXX 或者 Read timed out.
https://blog.csdn.net/zhang_han666/article/details/88286010 看了很多解决问题的博客,亲测通过更换国内安装源和设置超时时间可以解决.在pip ...
- java8 新用法
/** * 得到优先级最高的集合 * @param list es查询结果 * @return */public List<Group> getMaxPriorityGroup(List& ...
- springfox-swagger
swagger简介 swagger确实是个好东西,可以跟据业务代码自动生成相关的api接口文档,尤其用于restful风格中的项目,开发人员几乎可以不用专门去维护rest api,这个框架可以自动为你 ...
- POJ 1430 Binary Stirling Numbers (第二类斯特林数、组合计数)
题目链接 http://poj.org/problem?id=1430 题解 qaq写了道水题-- 在模\(2\)意义下重写一下第二类Stirling数的递推式: \[S(n,m)=S(n-1,m-1 ...
- R_Studio(教师经济信息)逻辑回归分析的方法和技巧
使用R语言对"教师经济信息"进行逻辑回归分析 (1)按3:1的比例采用简单随机抽样方法,创建训练集和测试集 (2)用训练集创建逻辑回归模型 (3)用测试集预测贷款结果,并用tabl ...
- SpringBoot导入导出Excel到Mysql
2018.11.11 10:44:52字数 96阅读 1320 一.包的引用 除了引用SpringBoot基本包之外,还需要引入对Excel操作的包,如下: <dependency> &l ...
- SQLite索引
索引(Index)是一种特殊的查找表,数据库搜索引擎用来加快数据检索.简单地说,索引是一个指向表中数据的指针.一个数据库中的索引与一本书后边的索引是非常相似的. 例如,如果您想在一本讨论某个话题的书中 ...
- Jmeter性能测试环境搭建(Windows下)
最近刚开始接触Jmeter性能测试,现总结环境搭建如下: 一.windows安装JDK步骤与环境变量配置: 1.先将下载的JDK安装到其默认目录:C:\Program Files\Java\jdk1. ...