Release X64平台

createdll.h
#ifndef CREARDLL_H_
#define CREARDLL_H_

extern "C" _declspec(dllexport) int add(int x, int y);/*_declspec(dllexport)声明一个导出函数,是说这个函数要从本DLL导出,我要给别人用。*/
int add(int x, int y);  //求和函数

#endif

createdll.cpp
#include"stdafx.h"  //注意不要忘了添加这个头文件
#include"creatdll.h"
#include<iostream>

int add(int x, int y)
{
    return x + y;
}

调用
#include<iostream>
#pragma comment(lib,"makeDLL.lib")

_declspec(dllimport) int add(int x, int y); //_declspec(dllimport)声明一个导入函数,是说这个函数是从别的DLL导入,我要用。

int main()
{
    std::cout << "2 + 3 = " << add(2, 3) << std::endl;

std::cin.get();
    return 0;
}

#define CPU_ONLY

包含目录:
F:\caffe-windows\include

F:\NugetPackages\boost.1.59.0.0\lib\native\include

F:\NugetPackages\glog.0.3.3.0\build\native\include

F:\NugetPackages\gflags.2.1.2.1\build\native\include

F:\NugetPackages\protobuf-v120.2.6.1\build\native\include

F:\NugetPackages\OpenBLAS.0.2.14.1\lib\native\include

F:\NugetPackages\OpenCV.2.4.10\build\native\include

E:\fengzhuangku\caffeConfigure\include\caffe

E:\fengzhuangku\caffeConfigure\include\caffe\layers

库目录:
F:\NugetPackages\lmdb-v120-clean.0.9.14.0\lib\native\lib\x64

F:\NugetPackages\LevelDB-vc120.1.2.0.0\build\native\lib\x64\v120\Release

F:\NugetPackages\OpenCV.2.4.10\build\native\lib\x64\v120\Release

F:\caffe-windows\Build\x64\Release

F:\opencv2.4.10\build\x64\vc12\lib

F:\NugetPackages\boost_date_time-vc120.1.59.0.0\lib\native\address-model-64\lib

F:\NugetPackages\boost_filesystem-vc120.1.59.0.0\lib\native\address-model-64\lib

F:\NugetPackages\boost_system-vc120.1.59.0.0\lib\native\address-model-64\lib

F:\NugetPackages\glog.0.3.3.0\build\native\lib\x64\v120\Release\dynamic

F:\NugetPackages\boost_thread-vc120.1.59.0.0\lib\native\address-model-64\lib

F:\NugetPackages\boost_chrono-vc120.1.59.0.0\lib\native\address-model-64\lib

F:\NugetPackages\gflags.2.1.2.1\build\native\x64\v120\static\Lib

F:\NugetPackages\hdf5-v120-complete.1.8.15.2\lib\native\lib\x64

F:\NugetPackages\protobuf-v120.2.6.1\build\native\lib\x64\v120\Release

F:\NugetPackages\OpenBLAS.0.2.14.1\lib\native\lib\x64

E:\fengzhuangku\caffeConfigure\lib   (libcaffe)

连接库
libboost_date_time-vc120-mt-1_59.lib
libboost_filesystem-vc120-mt-1_59.lib
libboost_system-vc120-mt-1_59.lib
libglog.lib
libcaffe.lib
gflags.lib
gflags_nothreads.lib
hdf5.lib
hdf5_hl.lib
libprotobuf.lib
libopenblas.dll.a
Shlwapi.lib
LevelDb.lib
lmdb.lib

E:\opencversiyio\build\x64\vc12\lib\opencv_video2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_objdetect2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_core2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_highgui2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_imgproc2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_ts2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_nonfree2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_ocl2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_photo2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_stitching2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_superres2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_videostab2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_calib3d2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_contrib2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_features2d2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_flann2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_gpu2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_legacy2410.lib
E:\opencversiyio\build\x64\vc12\lib\opencv_ml2410.lib

//注册问题

#include "caffe/common.hpp" 
#include "caffe/layers/input_layer.hpp" 
#include "caffe/layers/inner_product_layer.hpp" 
#include "caffe/layers/dropout_layer.hpp" 
#include "caffe/layers/conv_layer.hpp" 
#include "caffe/layers/relu_layer.hpp"

#include "caffe/layers/pooling_layer.hpp" 
#include "caffe/layers/lrn_layer.hpp" 
#include "caffe/layers/softmax_layer.hpp" 
#include "caffe/layers/normalize_layer.hpp"
#include "caffe/layers/permute_layer.hpp"
#include "caffe/layers/flatten_layer.hpp"
#include "caffe/layers/prior_box_layer.hpp"
#include "caffe/layers/concat_layer.hpp"
#include "caffe/layers/reshape_layer.hpp"
#include "caffe/layers/softmax_layer.hpp"
#include "caffe/layers/detection_output_layer.hpp"

namespace caffe
{
extern INSTANTIATE_CLASS(InputLayer);
extern INSTANTIATE_CLASS(ConvolutionLayer);
REGISTER_LAYER_CLASS(Convolution);
extern INSTANTIATE_CLASS(InnerProductLayer);
extern INSTANTIATE_CLASS(DropoutLayer);
extern INSTANTIATE_CLASS(ReLULayer);
REGISTER_LAYER_CLASS(ReLU);
extern INSTANTIATE_CLASS(PoolingLayer);
REGISTER_LAYER_CLASS(Pooling);
extern INSTANTIATE_CLASS(LRNLayer);
//REGISTER_LAYER_CLASS(LRN);
extern INSTANTIATE_CLASS(SoftmaxLayer);
//REGISTER_LAYER_CLASS(Softmax);
extern INSTANTIATE_CLASS(NormalizeLayer);
//REGISTER_LAYER_CLASS(Normalize);
extern INSTANTIATE_CLASS(PermuteLayer);
//REGISTER_LAYER_CLASS(Permute);
extern INSTANTIATE_CLASS(FlattenLayer);
extern INSTANTIATE_CLASS(PriorBoxLayer);
extern INSTANTIATE_CLASS(ConcatLayer);
extern INSTANTIATE_CLASS(ReshapeLayer);
extern INSTANTIATE_CLASS(SoftmaxLayer);
REGISTER_LAYER_CLASS(Softmax);
extern INSTANTIATE_CLASS(DetectionOutputLayer);
}

#endif

这时还会遇到一个麻烦的问题,添加了REGISTER_LAYER_CLASS()他会报重复注册,去掉这一句又报不认识这一层。
在layer_factory.hpp里做如下更改可以解决这个问题:

把static void AddCreator(const string& type, Creator creator){}里的:
    CHECK_EQ(registry.count(type), 0)<< "Layer type " << type << " already registered.";
    registry[type] = creator;

改为:

if (registry.count(type) != 0)
{
std::cout<< "Layer type " << type << " already registered.     ";
}
else
{
registry[type] = creator;
}
这样就能确保只注册一次了。

测试库

把编译生成的dll和lib库拷贝到测试工程中。配置库,运行需要dll库

caffe 动态库 Release X64的更多相关文章

  1. 【VS工程设置】 编译动态库,命令行添加参数,不使用预编译头,指定该项目链接 哪种 运行库

    编译动态库 注意: 动态库: [目标文件扩展] => .dll + [配置类型] => 动态库(.dll) 静态库: [目标文件扩展] => .lib + [ 配置类型]=> ...

  2. 最全Windows版本jemalloc库(5.2.1)及其使用:包含动态库和静态库、x86版本和x64版本、debug版本和release版本

    编写服务器程序时,需要频繁的申请和释放内存,长时间运行会产生大量的内存碎片,这就导致即使当前系统中的闲置内存还足够多,但也无法申请到大的连续可用的内存块,因为此时的物理内存已经千疮百孔像个马蜂窝.此外 ...

  3. faster_rcnn c++版本的 caffe 封装,动态库(2)

    摘要: 转载请注明出处,楼燚(yì)航的blog,http://www.cnblogs.com/louyihang-loves-baiyan/ github上的代码链接,求给星星:) https:// ...

  4. Unity跨平台C/CPP动态库编译---可靠UDP网络库kcp基于CMake的各平台构建实践

    1.为什么需要动态库 a)提供原生代码(native code)的支持,也叫原生插件,但是我实践的是c/cpp跨平台动态库,这里不具体涉及安卓平台java库和ios平台的objectc库构建. b)某 ...

  5. c++动态库封装及调用(3、windows下动态库调用)

    1.DLL的隐式调用 隐式链接采用静态加载的方式,比较简单,需要.h..lib..dll三件套.新建“控制台应用程序”或“空项目”.配置如下: 项目->属性->配置属性->VC++ ...

  6. 详解UE4静态库与动态库的导入与使用

    转自:http://blog.csdn.net/u012999985/article/details/71554628 一.基本内容概述   最近做项目时经常看到build.cs文件,就想研究一下UE ...

  7. 在VS2015中用C++编写可被其它语言调用的动态库DLL

    转自:http://blog.csdn.net/songyi160/article/details/50754705 VS2015用C++创建动态库DLL步骤如下: (1)启动VS2015>文件 ...

  8. Java通过jna调用c++动态库

    1 环境准备 操作系统:windows 10,x64 jna,jna-4.4.0.jar c++开发环境,vc2013 java开发环境,eclipse,jdk8 2 dll开发 通过vc2013创建 ...

  9. Unity3D跨平台动态库编译---记kcp基于CMake的各平台构建实践

    一 为什么需要动态库 1)提供原生代码(native code)的支持,也叫原生插件,但是我实践的是c/cpp跨平台动态库,这里不具体涉及安卓平台java库和ios平台的objectc库构建. 2)某 ...

随机推荐

  1. FireMonkey 源码学习(5)

    (5)UpdateCharRec 该函数的源码分析如下: procedure TTextLayoutNG.UpdateCharRec(const ACanvas: TCanvas; NeedBitma ...

  2. Linux - PWM的驱动编写【转】

    本文转载自:https://blog.csdn.net/u012264124/article/details/77482853 比如要用到pwm1,那么首先要保证这个pwm1并没有被别的驱动程序占用. ...

  3. Ubuntu18.04 一些好用的扩展

    原文:https://www.lulinux.com/archives/2589 一些好用的扩展: United:https://www.gnome-look.org/p/1167950/ dynam ...

  4. Java日期时间(Date/Time)

    获取当前日期和时间 在Java中容易得到当前的日期和时间.可以使用一个简单的Date对象的toString()方法,如下所示打印当前日期和时间: import java.util.Date; publ ...

  5. BZOJ5018: [Snoi2017]英雄联盟

    Description 正在上大学的小皮球热爱英雄联盟这款游戏,而且打的很菜,被网友们戏称为「小学生」.现在,小皮球终于受不 了网友们的嘲讽,决定变强了,他变强的方法就是:买皮肤!小皮球只会玩N个英雄 ...

  6. Thread类的常用方法

    String getName() 返回该线程的名称. void setName(String name) 改变线程名称,使之与参数 name 相同. int getPriority() 返回线程的优先 ...

  7. Jquery相关插件

    jQuery 插件autocomplete 应用 介绍 $("#AccountNames").autocomplete(Accounts, { minChars: 0, match ...

  8. java核心问题总结

    Java 核心概念 equals 与 hashCode 的异同点在哪里?Java 的集合中又是如何使用它们的. Math.Integer.Double等这些封装类在使用equals()方法时,已经覆盖 ...

  9. [小问题笔记(九)] SQL语句Not IN 效率低,用 NOT EXISTS试试

    项目中遇到这么个情况: t1表 和 t2表  都是150w条数据,600M的样子,都不算大. 但是这样一句查询 ↓ select * from t1 where phone not in (selec ...

  10. Linux的vi编辑器笔记

    vi编辑器,全称是visual interface,可以执行输出.删除.查找.替换等众多的文本操作. vi并不是一个排版程序,不可以对字体.格式.段落等其他的属性进行编排. vi是全屏文本编辑程序,没 ...