对opencv和caffe编译过程的思考

       在多次使用opencv和caffe后,我才开始对编译过程有了思考,我主要是以修改源码作为出发点。二者都是使用VS2013。

1.Opencv

       opencv通常有两种使用模式。一种是直接下载已经编译完成可直接使用的包;另一种是自己下载源码,编译后使用。

       PS:官网上可以下到编译好的库,为什么还要自己编译呢?(参考)

       原因之一:官网上提供的编译好的库只包含其核心模块,并不包含OpenCV_contrib中的扩展模块;且可以按照需要配置编译选项。

       原因之二:我们可以对其源代码进行修改,重新编译后为自己所用。

       那我们用什么编译opencv呢?Cmake出现了。它可以编译多种大型源码。编译生成bulid文件夹后,里面包含了生成的dll库文件,以便VS主程序链接使用。Cmake也可以为小程序生成makefile文件,辅助执行。

       IDE工具是VS2013。静态库是lib,动态库是dll,运行文件是exe。静态库在编译阶段使用,包含函数声明和dll入口位置;动态库在运行阶段使用,包含函数实现方法。我们使用VS项目时需要配置opencv的头文件、库文件和库依赖(其实就是库文件目录中的lib)。VS编译时不会再编译opencv模块的函数,只需要链接使用即可,所以其编译很快的。

2.Caffe框架

       linux平台上,直接编译,使用就可以了。

       windows平台上有两种方案:

       第一种是使用原始caffe源码,用Cmake编译成VS项目方式使用(这里不太清楚其是否已经将caffe核心编译为dll库形式,我猜测是的,也是编译为库形式,等待被调用;因为opencv是会被Cmake编译成多个dll库等待使用的);

       第二种是使用caffe-windows方式,我们使用的这种。其专门有个windows文件夹。打开caffe.sln,利用VS2013直接编译生成bulid文件夹后,里面包含了一些依赖库的dll库文件(是以前就生成的),还有新生成的libcaffe.lib。也就是说,是在VS中编译生成的caffe核心。总结一下:第一种是Cmake编译Caffe核心;第二种是VS编译Caffe核心,所以第二种我们直接修改源码很方便。

      我以前写的项目,没有单独分开生成lib库,所以每次编译都会编译所有模块,生成多个obj文件。对比之下,caffe-windows是有一个libcaffe项目生成lib;还有个caffe项目生成主exe,调用刚才生成的lib,层次划分的非常好。

      用caffe的分类项目做了个编译方面测试,据说单独拿出来的caffe小demo慢于在caffe原项目中建立工程。参考https://blog.csdn.net/zb1165048017/article/details/70116323该文章。包括了VS内部配置(头文件,库文件包含)项目props文件改写外部依赖库调用libcaffe.lib静态库和dll动态库的使用

       最后:一直就想了解 项目-编译-运行,算是简单分析一下吧!写的很随意,可能就自己能看懂了。。

你可能感兴趣的:(编程语言,调试工具,visual,studio,cmake)