利用caffe自带的Makefile编译自定义so文件
1、文件目录结构
- caffe-root
- |--include
- |--example
- |--modules
- |--test.h
- |--test.cpp
- |--python
- |--src
- |--tools
modules为我们添加的目录和文件
2、修改Makefile文件
(1)添加生成动态链接库文件名称
- DYNAMIC_NAME_MODULES:=$(LIB_BUILD_DIR)/libmodules.so
(2)获取所有源文件
- # CXX_SRCS are the source files excluding the test ones.
- CXX_SRCS := $(shell find src/$(PROJECT) ! -name "test_*.cpp" -name "*.cpp")
- # CU_SRCS are the cuda source files
- CU_SRCS := $(shell find src/$(PROJECT) ! -name "test_*.cu" -name "*.cu")
- # MODULES_SRCS are the source files excluding the test ones.
- MODULES_SRCS := $(shell find modules ! -name "test_*.cpp" -name "*.cpp")
(3)设置源文件对应的目标文件
- # The objects corresponding to the source files
- # These objects will be linked into the final shared library, so we
- # exclude the tool, example, and test objects.
- CXX_OBJS := $(addprefix $(BUILD_DIR)/, ${CXX_SRCS:.cpp=.o})
- CU_OBJS := $(addprefix $(BUILD_DIR)/cuda/, ${CU_SRCS:.cu=.o})
- MODULES_OBJS := $(addprefix $(BUILD_DIR)/, ${MODULES_SRCS:.cpp=.o})
(4)生成链接库命令
- $(DYNAMIC_NAME_MODULES): $(MODULES_OBJS) $(DYNAMIC_NAME) | $(LIB_BUILD_DIR)
- @ echo LD -o $@
- $(Q)$(CXX) -shared -o $@ $(MODULES_OBJS) $(LINKFLAGS) $(LDFLAGS) -l$(LIBRARY_NAME) -Wl,-rpath,$(ORIGIN)/./lib
注意:$(DYNAMIC_NAME) 为 caffe.so,因为modules中的文件用到了caffe中的函数,如果为用到则可以去掉该变量
(5)添加到targets
- lib: $(STATIC_NAME) $(DYNAMIC_NAME) $(DYNAMIC_NAME_MODULES)
3、$ cd CAFFE_ROOT
$ make -j
生成的链接库位于 CAFFE_ROOT/build/lib 中
利用caffe自带的Makefile编译自定义so文件的更多相关文章
- 使用makefile编译多个文件(.c , .cpp , .h等)
有时候我们要一次运行多个文件,这时候我们可以使用Makefile!!! ◊make是什么? make是一个命令工具,是一个解释makefile中指令的命令工具.它可以简化编译过程里面所下达的指令,当执 ...
- Makefile 编译动态库文件及链接动态库
本文为原创文章,转载请指明该文链接 文件目录结构如下 dynamiclibapp.c Makefile comm/inc/apue.h comm/errorhandle.c dynamiclib/Ma ...
- Makefile 编译静态库文件及链接静态库
本文为原创文章,转载需指明该文链接 1.代码目录结构如下: comm/ comm/inc/apue.h 3 atexit.c Makefile 5 staticlib/lib/ staticlib ...
- 运行caffe自带的mnist实例教程
运行caffe自带的mnist实例教程 本文结合几篇博文总结下来的,附上其中一篇原博文链接以供参考:http://blog.sina.com.cn/s/blog_168effc7e0102xjr1.h ...
- gcc与makefile编译 BY 四喜三顺
gcc编译控制过程:(假设源代码为a.c)(1)源文件到预处理文件: gcc -E -o a.cxx a.c a.cxx显示调用哪些头文件(2)生成汇编代码: g ...
- live555学习(一)通读Makefile编译live555
live555学习(一)通读Makefile编译live555 live555 编译live555 学习开源 live555学习(一)通读Makefile编译live555 前言 live555简介 ...
- [转]利用C#自带组件强壮程序日志
利用C#自带组件强壮程序日志 在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简 ...
- 转载——利用C#自带组件强壮程序日志
利用C#自带组件强壮程序日志 在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简 ...
- 利用微信电脑最新版 反编译微信小程序 无需root
一.前言 大家都知道编写一个微信小程序是非常漫长的,但是由于现阶段微信小程序存在反编译的可能,于是我去github上找到一个反编译工具(https://github.com/qwerty472123/ ...
随机推荐
- MongoDB数据库中查询数据(下)
MongoDB数据库中查询数据(下) 在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍: 1. fields; 该属性值为一 ...
- 小程序 获取微信小程序的源码
1.微信小程序是以wxapkg可执行文件的形式存在本地的 2.网上有工具可以把wxapkg文件还原成源代码: https://github.com/qwerty472123/wxappUnpacker ...
- Luogu4700 CEOI2011 Traffic Tarjan、搜索
传送门 题意:给出平面上$N$个点,它们一定在左下角为$(0,0)$,右上角为$(A,B)$的一个矩形内的整点上(包括边界),而且会给出$M$条呈直线的边,其中有有向边也有无向边,保证任意两条边不会在 ...
- 各种工业以太网比较(EtherCAT,EtherNet/IP,ProfiNet,Modbus-TCP,Powerlink)
EtherCAT(以太网控制自动化技术)是一个以以太网为基础的开放架构的现场总线系统,EterCAT名称中的CAT为ControlAutomation Technology(控制自动化技术)首字母的缩 ...
- Log4j使用笔记
在工作过程中,常常需要查看后台日志,为了更好的记录日志,我们使用Log4j来记录日志. 一.maven依赖的配置 在maven中央库库里找到log4j的java包,添加 ...
- 绍一集训Round#2
Preface 感觉这次的题目是真的太水了,可能是为了让我们涨一波信心的吧. 不过最后一题没有想到那种玄学做法还是太菜了,还是要一波姿势的啊. 交换 一道入门难度题,根据排序不等式(又或是简单推导可以 ...
- Jmeter(三十一)_数据驱动,业务关联
这种数据驱动的本质是:将测试的case,参数,url,预期结果,存储于本地excel中.运行脚本时,从文件中获取预期结果,将实际结果与预期结果比较,将实际结果,比较结果,响应状态码回写excel. 一 ...
- Git的学习与使用
Git使用教程 一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN和Git最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自 ...
- ExtJs 编译
前台使用Extjs加载源码的话是非常庞大的,编译之后就只加载一个app.js文件.这种技能如果不知道的话怕别人骂我不是个女程序员.哈哈哈哈哈. 打开cmd,进入程序Extjs的文件夹,如我的程序Ext ...
- Python - 内置函数 选例
概览参见 https://www.runoob.com/python/python-built-in-functions.html 官方文档 https://docs.python.org/3/li ...