c++项目中引入xgboost静态库

参考文章
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了。

要在Java项目使用XGBoost库,你需要先确保你的项目配置了Maven支持,并且已经在pom.xml文件添加了XGBoost的依赖。XGBoost本身没有直接提供Java API,但你可以通过JVM调用其C++版本。以下是如何在Maven项目引入XGBoost的步骤: 1. **添加Maven仓库**: 首先,你需要在`pom.xml`文件的`<repositories>`标签下添加XGBoost的Maven仓库。XGBoost官方提供了maven-repo,但有时可能会有更新的镜像,比如阿里云的Maven仓库(https://mvnrepository.com/artifact/com.xgboost/xgboost)。 ```xml <repositories> <repository> <id>xgboost-mvn-repo</id> <url>https://xgboost.ai/maven</url> </repository> </repositories> ``` 2. **添加依赖**: 接下来,在`<dependencies>`标签下添加XGBoost的依赖。如果你要使用的是最新稳定版,可以使用以下语句: ```xml <dependency> <groupId>com.xgboost</groupId> <artifactId>xgboost4j</artifactId> <version>1.5.0</version> <!-- 根据实际版本替换 --> </dependency> <dependency> <groupId>org.dmlc</groupId> <artifactId>xgboost4j-spark_2.12</artifactId> <version>1.5.0</version> <!-- 如果你的项目是Spark集成 --> </dependency> ``` 注意这里可能有两个依赖,一个是基本的Java接口库(xgboost4j),另一个是Spark集成的版本(xgboost4j-spark_2.12)。如果不需要Spark集成,则只需要第一个依赖。 3. **构建项目**: 完成上述设置后,运行`mvn clean install`命令来下载并安装XGBoost依赖到本地Maven仓库。 4. **使用XGBoost**: 现在可以在Java代码导入`com.dmlc.xgboost4j.XGBoost`或`com.dmlc.xgboost4j.spark.XGBoostModel`等类开始使用XGBoost了。 ```java import com.dmlc.xgboost4j.XGBoost; // ... XGBoost xgb = new XGBoost(); // ... ``` 记得检查XGBoost的文档以了解如何训练模型、加载模型和进行预测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值