c++項目中引入xgboost靜態庫

來源:互聯網
上載者:User

參考文章
Using XGBOOST in c++

c++項目引入xgboost動態庫 問題背景

xgboost項目官方沒有提供c_api方式的編譯以及引入教程,所以剛開始我們是用直接把項目源碼引入到我們的項目中,非常麻煩。

剛開始我們以源碼的方式匯入到項目中,調用原始碼的方法中,代碼寫的非常冗餘,而且一些api不能為我們所用。所以總想著如何直接引入xgboost的靜態庫。
由於我們使用的是blade構建工具,所以第一步使用製作blade規則的xgboost項目。 源碼編譯

https://github.com/dmlc/xgboost

安裝官方文檔下載github源碼,編譯,然後在會產生如下3個靜態檔案已經3個include檔案夾,我們就需要這些東西。 xgboost/lib/libxgboost.a xgboost/include/ xgboost/rabit/lib/librabit.a xgboost/rabit/include xgboost/dmlc-core/libdmlc.a xgboost/dmlc-core/include 建立blade工程

建立檔案夾sfxgboot,把剛才的3個靜態檔案,存放到sfxgboost/lib/目錄下,把include檔案夾存放到sfxgboost/include/目錄下。

建立BUILD檔案,內容如下:

cc_library(        name = 'sfxgboost',        optimize = ['O2', 'std=c++11','fopenmp'],        export_incs = ['include'],        deps = [                    ':xgboost',                    ':rabit',                    ':dmlc',                ])cc_library(        name = 'xgboost',        prebuilt = True,)cc_library(    name = "dmlc",    prebuilt = True,)cc_library(    name = "rabit",    prebuilt = True,)

上面的.a檔案引入的順序是有要求的,不能更改。 其他項目引入

xgboost作為靜態庫的項目已經建立完成,那麼開發項目如何引入呢。很簡單,在你的項目BUILD加入如下代碼:

cc_binary(    name = 'test',    optimize = ['O2', 'std=c++11','g'],    extra_linkflags = [ '-fopenmp' ],    srcs = [        ...    ],    incs = [       ...    ],    deps = [        '#dl',        '#z',        '#rt',        '#crypto',        '#ssl',        '//BUILD_ROOT/sfxgboost:sfxgboost',    ],)

然後在需要調用api的標頭檔中添加如下代碼

#include "xgboost/c_api.h"

就可以調用c_api了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.