编写|PaddlePaddle
排版|wangp
1
概述
使用 C-API 进行预测依赖于将 PaddlePaddle 核心代码编译成链接库,只需在编译时需配制下面这些编译选项:
必须配置选项:
WITH_C_API,必须配置为ON
推荐配置选项:
WITH_PYTHON,推荐配置为OFF
WITH_SWIG_PY,推荐配置为OFF
WITH_GOLANG,推荐设置为OFF
可选配置选项:
WITH_GPU,可配置为ON/OFF
WITH_MKL,可配置为ON/OFF
对推荐配置中的选项建议按照设置,以避免链接不必要的库。其它可选编译选项按需进行设定
下面的代码片段从github拉取最新代码,配制编译选项(需要将PADDLE_ROOT替换为PaddlePaddle预测库的安装路径):
PADDLE_ROOT=/path/of/capi
git clone https://github.com/PaddlePaddle/Paddle.git
cd Paddle
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PADDLE_ROOT \
-DCMAKE_BUILD_TYPE=Release \
-DWITH_C_API=ON \
-DWITH_SWIG_PY=OFF \
-DWITH_GOLANG=OFF \
-DWITH_PYTHON=OFF \
-DWITH_MKL=OFF \
-DWITH_GPU=OFF \
..
执行上述代码生成Makefile文件后,执行:make && make install。成功编译后,使用C-API所需的依赖(包括:(1)编译出的PaddlePaddle预测库和头文件;(2)第三方链接库和头文件)均会存放于PADDLE_ROOT目录中
编译成功后在 PADDLE_ROOT 下会看到如下目录结构(包括了编译出的PaddlePaddle头文件和链接库,以及第三方依赖链接库和头文件(如果需要,由链接方式决定)):
├── include
│ └── paddle
│ ├── arguments.h
│ ├── capi.h
│ ├── capi_private.h
│ ├── config.h
│ ├── error.h
│ ├── gradient_machine.h
│ ├── main.h
│ ├── matrix.h
│ ├── paddle_capi.map
│ └── vector.h
├── lib
│ ├── libpaddle_capi_engine.a
│ ├── libpaddle_capi_layers.a
│ ├── libpaddle_capi_shared.so
│ └── libpaddle_capi_whole.a
└── third_party
├── gflags
│ ├── include
│ │ └── gflags
│ │ ├── gflags_completions.h
│ │ ├── gflags_declare.h
│ │ ...
│ └── lib
│ └── libgflags.a
├── glog
│ ├── include
│ │ └── glog
│ │ ├── config.h
│ │ ...
│ └── lib
│ └── libglog.a
├── openblas
│ ├── include
│ │ ├── cblas.h
│ │ ...
│ └── lib
│ ...
├── protobuf
│ ├── include
│ │ └── protobuf
│ │ ...
│ └── lib
│ └── libprotobuf-lite.a
└── zlib
├── include
│ ...
└── lib
...
2
链接说明
目前提供三种链接方式:
A.链接libpaddle_capi_shared.so 动态库
使用 PaddlePaddle C-API 开发预测程序链接libpaddle_capi_shared.so时,需注意:
上面这种方式最为简便,链接相对容易,在无特殊需求情况下,推荐使用此方式
B.链接静态库 libpaddle_capi_whole.a
使用PaddlePaddle C-API 开发预测程序链接libpaddle_capi_whole.a时,需注意:
C.链接静态库 libpaddle_capi_layers.a和libpaddle_capi_engine.a
使用PaddlePaddle C-API 开发预测程序链接libpaddle_capi_whole.a时,需注意: