网站宽度960,全球设计网优秀版式作品,松江企业做网站,商务网站开发实训任务书工作环境 巧妇有了米炊 众所周知#xff0c;Caffe是在Linux下写的#xff0c;所以长久以来#xff0c;大家都认为跑Caffe#xff0c;先装Linux。 niuzhiheng大神发起了caffe-windows项目#xff08;解决了一些编译、API相异问题#xff09; 以及willyd大神发起的caffe-wi…工作环境 巧妇有了米炊 众所周知Caffe是在Linux下写的所以长久以来大家都认为跑Caffe先装Linux。 niuzhiheng大神发起了caffe-windows项目解决了一些编译、API相异问题 以及willyd大神发起的caffe-windows-dependencies项目整理了依赖库修正了LMDB在NTFS分区的Bug) 我们现在可以很欢乐地在Windows上研究Caffe源码以及山寨它了。 编辑器 在Windows下涉及CUDAVisual Studio必然是首选。如果问原因这是NVIDIA官方的推荐。 CUDA最初使用的语言除了二进制机器码就是类似CPU汇编的GPU汇编——PTX代码。 后来NVIDIA的工程师写了C接口编译器称为NVCC。 NVCC相当有趣它在编译前需要对CUDA代码以及传统C/C代码做分离。 这一步给模板(Template)分离式编程带来比较大的麻烦C/C编译器和NVCC编译器不共享某些知识 所以你需要重复某些代码。幸好我们有宏 CUDA的地位与DirectX差不多后者是MS为GPU封装的C接口。 CUDA、OpenCL、DirectX旗下的Direct Compute并称为GPGPU通用计算的三个小王子。 当然CUDA属于那种为了夺嫡开挂的小人目前你看到的CUDA框架只限于NVIDIA GPU 因为它在设计的时候没有从通用GPU出发直接在自家的硬件物理架构上设计所以优势很大。 再说Windows玩过游戏的人都知道NVIDIA和MS是多年友商了。 玩游戏有句信条千万不要用Linux。这句话可以从两方面解释 (I) NVIDIA为Windows全心全意做驱动程序证据是Linux装显卡驱动曾经 是一个老大难问题无数人抱怨“NVIDIA就是MS的奸细”。 (II) 很少有开发者用Linux API写游戏(PC端) 这个现象最近有所改观基础驱动和CUDA也为部分Linux提供了支持(Ubuntu)。 就连CES2016上老黄演示无人驾驶系统Drive PX 2 Demo居然也是跑在Linux(Ubuntu)上。 似乎还被人看出来跑的是Caffe(疑似)但不论则么说NVIDIA现在是对Linux有所关注了。 为了体现与MS的友谊CUDA几乎是与Visual Studio捆绑的前提你得先装VS。 CUDA会把插件和配置直接自动写到VS里去。 配置NVCC和以及传统C/C编译器相当繁琐如果你是民间大神可以尝试Vim或Sublime。 但是最好不要这么作死VS其实也不是很难用。 OS及VS 我个人在Windows10 Threshold 1下工作。 VS使用是Metro先锋VS2013相当老掉牙的版本。VS 2012及以下的UI相当丑因为同年8月才出了Windows8。 VS的默认工作模式是X64 Release。 依赖环境库 你的VS工作环境决定了你的依赖库是如何使用的。 依赖库有“大三元”的说法 如图就是这三个目录分别存着动态库、引用头文件静态库。 (I)先说说静态库VS的静态库是lib文件GCC的静态库是a文件。 静态库只能在编译阶段的链接器中使用这与C/C的分离式编程有关。 众所周知C/C倡导声明定义分离这大大加快了整体编译速度以及方便外部调用。 于是编译阶段分为两部门先进行声明的分析然后再把定义填充进去。 声明的全部内容通常是提供给外部的是由零碎的头文件组成你想用就#include就好了。 定义的内容会被链接器灌装起来。根据灌装模式的不同就出现了静态编译和动态编译两类。 根据生成内容的不同又可以分为可执行文件生成和库生成两类。 利用笛卡尔积我们大概得到四种模式 ★库生成静态编译 h文件lib文件(VC) 或者h文件a文件(GCC) ) ★库生成动态编译 (不存在) ★可执行文件生成静态编译 (exe文件) ★可执行文件生成动态编译 ( exe文件dll or bin文件so文件(Linux) ) 其中第二种方式是不存在的。所以针对库生成而言我们只需要hlib/a文件即可。 它们应当分别放到include和lib文件夹中。 在VS中配置头文件/静态库很简单分为两步 ★在工程属性-VC目录中指定包含目录以及”库目录“分别为h目录以及lib目录 ★在工程属性-链接器-输入中手动添加需要的lib文件 第二步相当重要如果不做那么编译是不会错的但是在链接定义的时候会找不到lib中的定义 error LNK2001: 无法解析的外部符号 如果你的lib目录没错那么试着找一找是不是没有手动添加lib文件(VS不会自动扫描目录文件并且添加) (II)再说说动态库这个方式只有在选择了Release模式编译之后才会使用。 先说说Debug和Release的区别。 Debug版本一般不用来发布不仅是因为里面包含了Debug代码而且没有做编译优化性能有折扣。 但是有一点好处就是可以断点、调试但这非常麻烦。 由于外部依赖库的灌装你要Debug你的程序需要提供pdb符号文件这意味着你得自己把所有依赖库 自己编译一遍得到pdb文件否则无法Debug也就无法断点调试。 因为无法断点所以Debug只能靠人工推理出断点推测可能位置加cout/printf语句测试 还有一点就是Debug版本在调试模式中的执行只需要lib文件如图 但是一旦你把Debug版本的exe文件拿到别处就需要dll文件了这时候需要动态库。 Release版本则是强制使用动态库就算是调试模式也无效。 在VS中配置动态库很简单只要一步 ★在工程属性-调试中指定环境的值为PATH%PATH%;C:\xxx\bin 确保bin里存在需要的dll文件否则OS会一致提示你缺少dll文件。 另外Debug和Release版本需要的lib文件和dll文件均是不同的不能混用。 一般文件名后补一个d表示这是Debug版本的dll/lib。 教学用·快速依赖环境包 这个包仅教学使用阉割庞大的Boost直接无视了OpenCV(这东西其实没多大用)。 对于山寨Caffe足够了。仅仅30MB适合傻瓜。 强调请用于 X64 Release 度娘http://pan.baidu.com/s/1NeDrS 有问题邮箱我neopenxmail.hfut.edu.cn 2016.2.18 更新lmdb.lib -修正Win32平台下set end of file error的输出信息问题 解决方案是在lmdb源码的mdb.c里把这句printf注释掉。 这是一句毫无意义的输出信息仅仅在Windows平台下被编译出来强迫症患者可以选择尝试。 度娘http://pan.baidu.com/s/1sk29YlJ