利用caffe自带的Makefile编译自定义so文件
Posted BlueOceans
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用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 [email protected] $(Q)$(CXX) -shared -o [email protected] $(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文件的主要内容,如果未能解决你的问题,请参考以下文章
Caffe学习4-利用caffe.proto自定义自己的网络
caffe日常学习之:编译examples中的cpp文件描述文件——makefile
导入 caffe/scipy 错误:liblapack.so.3:未定义符号:sgetrs_N_single