利用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

CAFFE安装:CAFFE下载与编译

导入caffe / scipy错误:liblapack.so.3:未定义的符号:sgetrs_N_single

安装caffe时遇到的各种问题