官方網站編譯參考鏈接:

# 一、環境準備

1、參照環境要求,準備gcc8.2,否則會碰到未知錯誤,比如

error: identifier "__builtin_ia32_sqrtsd_round" is undefined

2、切換gcc版本

3、由於我使用的proto版本是3.4.0,與官網上給定的3.1.0不一致,編譯時產生如下問題:

third_party/protobuf/src/google/protobuf/stubs/port.h:263:5: error: this use of "defined" may not be portable [-Werror=expansion-to-defined]
 #if GOOGLE_PROTOBUF_USE_UNALIGNED
     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
third_party/protobuf/src/google/protobuf/stubs/port.h:263:5: error: this use of "defined" may not be portable [-Werror=expansion-to-defined]
third_party/protobuf/src/google/protobuf/stubs/port.h:263:5: error: this use of "defined" may not be portable [-Werror=expansion-to-defined]
third_party/protobuf/src/google/protobuf/stubs/port.h:263:5: error: this use of "defined" may not be portable [-Werror=expansion-to-defined]

 通過對比發現,此原因在於proto3.4.0版本對.proto生成的third_party/protobuf/src/google/protobuf/stubs/port.h文件中有如下:

#ifdef GOOGLE_PROTOBUF_DONT_USE_UNALIGNED
# define GOOGLE_PROTOBUF_USE_UNALIGNED 0
#else
// x86 and x86-64 can perform unaligned loads/stores directly.
# define GOOGLE_PROTOBUF_USE_UNALIGNED defined(_M_X64) || \
     defined(__x86_64__) || defined(_M_IX86) || defined(__i386__)
#endif

#if GOOGLE_PROTOBUF_USE_UNALIGNED

 改成:

/*#ifdef GOOGLE_PROTOBUF_DONT_USE_UNALIGNED
# define GOOGLE_PROTOBUF_USE_UNALIGNED 0
#else
// x86 and x86-64 can perform unaligned loads/stores directly.
# define GOOGLE_PROTOBUF_USE_UNALIGNED defined(_M_X64) || \
     defined(__x86_64__) || defined(_M_IX86) || defined(__i386__)
#endif

#if GOOGLE_PROTOBUF_USE_UNALIGNED*/
#if defined(_M_X64) || defined(__x86_64__) || \
    defined(_M_IX86) || defined(__i386__)

因為proto3.1生成的port.h文件中只有如上語句,修改後即可編譯通過。

二、修改CMakeList.txt

1、將CMakeList.txt中的github.com改成gitee.com;

2、將cmake文件夾下各個文件中的GIT_URL參數後面的名字改成xxx(個人創建的gitee倉庫名);

3、將influence中需要用到的第三方庫(連接到github的)都添加到xxx賬户的gitee中;

4、由於pybind11會引用第三方子模塊,會提示鏈接不上,因此本地修改倉庫:

首先將pybind11倉庫添加進gitee倉庫中,然後開始做如下修改

//本地進行修改
git clone --recursive https://gitee.com/xxx/pybind11
cd pybind11
git submodule add https://gitee.com/xxx/clang-cindex-python3 tools/clang
//查看當前的狀態(即修改了些什麼) 
git status   
//將當前status中文件添加到暫緩區 
git add .
//提交修改信息到本地倉庫並添加備註
git commit -m "添加clang"
//將本地倉庫推送到遠程倉庫
git push origin master
//創建本地倉庫tag
git tag v2.4.8
//推送到遠程倉庫
git push origin v2.4.8
//查看遠程倉庫的tag
git ls-remote --tags origin
// 切換到主分支上
git checkout master
//切換到v2.4.8標籤上
git checkout v2.4.8

將Paddle/cmake/external/pybind11.cmake修改為

SET(PYBIND_TAG            v2.4.8)

即可編譯通過。 

三、修改系統配置

// xxx 表示系統用户名
su xxx
// 設置最大打開文件數量
ulimit -n 102400
// 設置後再執行sudo make操作