编译caffe的dll库

原创 2016年05月30日 17:03:22

前一篇的测试程序只能编译通过,并不可用。


因为caffe windows版本默认的libcaffe是静态库,而静态库编译并不会把虚基类layer_factory和一系列子类包含进去。

这就导致在载入文件时会报错,无法识别layer的类型。

所以需要动态编译libcaffe。


1,首先当然把libcaffe工程配置类型从lib改成dll。但此时直接编译并不会产生lib文件,只有一个dll文件是不够用的。


2,做宏定义:这个宏定义需要添加到所有下面提到的hpp文件里

#ifdef BUILD_DLL
#define OS_API __declspec(dllexport)
#else
#define OS_API __declspec(dllimport)
#endif,

然后再预处理器定义BUILD_DLL,这是windows下编写dll的必经步骤。


3,对源码做一些改动,其实就是把一些接口类和方法的定义 里加上OS_API ,如下:

blob.hpp
class OS_API Blob

net.hpp
class OS_API Net

caffe.pb.h
class OS_API BlobShape
class OS_API BlobProto
class OS_API BlobProtoVector
class OS_API SolverParameter
class OS_API LayerParameter
class OS_API NetParameter
class OS_API FillerParameter
因为这个头文件是根据src\caffe\proto\caffe.proto自动生成的,所以编译的时候还把这个文件改了名字,否则就把修改后的caffe.pb.h又覆盖了

common.hpp
OS_API void GlobalInit(int* pargc, char*** pargv);
class OS_API Caffe
class OS_API RNG

io.hpp
OS_API bool ReadProtoFromTextFile(const char* filename, Message* proto);
OS_API bool ReadProtoFromBinaryFile(const char* filename, Message* proto);
OS_API void WriteProtoToBinaryFile
OS_API bool ReadImageToDatum
OS_API bool DecodeDatumNative(Datum* datum);
void OS_API WriteProtoToTextFile

db.hpp
class OS_API DB
OS_API DB* GetDB(DataParameter::DB backend);

OS_API DB* GetDB(const string& backend);

benchmark.hpp
class OS_API Timer 

upgrade_proto.hpp
OS_API void ReadSolverParamsFromTextFileOrDie
OS_API bool NetNeedsUpgrade(const NetParameter& net_param);
OS_API bool UpgradeNetAsNeeded(const string& param_file, NetParameter* param);
OS_API bool SolverNeedsTypeUpgrade(const SolverParameter& solver_param);
OS_API boolbool UpgradeSolverAsNeeded(const string& param_file, SolverParameter* param);

signal_handler.h
class OS_API SignalHandler

solver.hpp
class OS_API Solver

parallel.hpp
class OS_API P2PSync

layer.hpp
class OS_API Layer

math_functions.hpp
OS_API unsigned int caffe_rng_rand();
OS_API Dtype caffe_cpu_dot(const int n, const Dtype* x, const Dtype* y);
OS_API void caffe_rng_gaussian
OS_API void caffe_rng_bernoulli(const int n, const Dtype p, int* r);

OS_API void caffe_rng_bernoulli(const int n, const Dtype p, unsigned int* r);
OS_API void caffe_copy(const int N, const Dtype *X, Dtype *Y);
OS_API void caffe_set(const int N, const Dtype alpha, Dtype *X);
OS_API void caffe_rng_uniform(const int n, const Dtype a, const Dtype b, Dtype* r);

syncedmem.hpp
class OS_API SyncedMemory


相比上一篇里提到的dll,这个libcaffe.dll使用还需要加上lmdb.dll。

这次,终于能使用caffe训练好的模型了。


这样改动会导致testall工程编译错误。

因为该工程直接调用了很多layer类型,而在实际使用的时候,我们只需要定义虚基类layer,所以layer目录下的类我并没有都添加到接口里。

封装caffe-windows-master为动态链接库

因为caffe-windows-master的代码比较多,看着很乱,所以想到把它封装成一个类来调用做图像分类,这里以GPU版本为例,记录一下自己封装成DLL和如何使用封装后的DLL的过程。 1.打...

深度学习caffe中的分类程序(classification)制作成动态链接库(dll)

最近因公司项目需要把caffe中的classification分类程序融入到自己的项目程序中,因此把Caffe中的classification封装成dll供源程序进行调用。经过两天的不懈努力,终于把c...

VS2013调用caffe新建自己的工程详细过程

VS2013调用caffe新建自己的工程详细过程 在windows上编译好caffe之后(纯CPU),很多人都会存在这样的问题,我该如何去调用编译好的caffe来新建自己的工程开发自己的应用呢,这个...

windows下让自己的程序调用caffe库

本文将通过一个最简单的caffenet的调用,讲解windows下的caffe库调用。 首先,新建一个端口程序,将E:\caffe\examples\cpp_classification目录下的cla...

Caffe之win10版安装小结--细数自己遇到的各种坑

参考自:基于Windows10 x64+visual Studio2013+Python2.7.12环境下的Caffe配置学习 windows7+visual studio 2013+CUDA7.5...

Caffe学习笔记(一)——Windows 下caffe安装与配置

本文主要介绍:经过一番周折,在Windows7 64位系统下成功配置Caffe,下面总结一下基本的配置过程,以及配置过程中遇到的问题。 配置环境:Windows7 X64 + CUDA7.0 ...

Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤

Windows7上使用VS2013编译Caffe源码(不带GPU支持)步骤!

微软libcaffe封装成dll和lib!!!

Windows下利用VS使用Caffe可以为开发者提供很好的体验,但是每次编译的时候的总是十分钟的时间在改代码,剩下50分钟在编译的过程中,另外在实际图像分类开发中,很多情况下我们可能只需要一两个函数...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

封装caffe-windows-cpu(支持模型有多个输出)

注意:该版本为CPU版本。 用到的caffe-windows来自:https://github.com/happynear/caffe-windows 先下载caffe-windows,解压;然后...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编译caffe的dll库
举报原因:
原因补充:

(最多只允许输入30个字)