Windows下编译xgboost的C++源码(方便vs运行的)

(作者:陈玓玏)

1、 下载源码:

网址:https://github.com/dmlc/xgboost ,最好不要直接下载zip,而是克隆,因为直接下载会下载不到xgboost依赖的dmlc-core和rabbit等库,导致编译失败。克隆的好方法是通过git,Windows版的git下载地址:https://gitforwindows.org/

下载好git后,打开git bash,输入:

$ git clone --recursive https://github.com/dmlc/xgboost
$ git init  --初始化一个空的本地仓库
$ git submodule init   --对子模块初始化

–recursive可以帮我们把依赖库也下载下来。并且在输入git submodule init前一定要先输入git init,不然会报错:fatal: not a git repository (or any of the parent directories): .git.

2、安装cmake

如果想用vs运行源码,需要先产生sln格式的解决方案,所以我们需要一个神器叫cmake。下载地址:https://cmake.org/download/ 。我下的是图中红线画出的版本:
在这里插入图片描述
接着是傻瓜式安装,不过在选择是否把cmake加入到系统变量中时选择是。
安装完之后记得重启,否则不能使用cmake。

3、编译源码

开始跟着xgboost官方文档 https://xgboost.readthedocs.io/en/latest/build.html 中的Compile XGBoost with Microsoft Visual Studio部分操作:
右键开始,点击运行,输入cmd,由此打开windows命令行。
打开命令行之后,cd到xgboost文件夹下,逐行输入以下命令:

$ mkdir build
$ cd build
$ cmake .. -G"Visual Studio 12 2013 Win64"

最后一句话要注意一下,12 2013指的是你所用的vs的版本号,所以要对应,比如我用的是2017版,这里也需要把2013改为2017,否则就会报错。
这句话到底怎么改,看下图:
在这里插入图片描述
如果你用的vs版本是2017,那么你需要把最后一句话改成cmake … -G"Visual Studio 15 2017 Win64"。
编译成功的标准就是:命令行窗口会提示你成功了,并且lib文件夹下会出现xgboost.dll文件,并且build文件夹下会出现xgboost.sln文件,有了这个文件才能在vs上运行。

4、运行xgboost

用vs打开build文件夹中的xgboost.sln文件。

现在要按照 https://blog.csdn.net/qq_27792379/article/details/69487258 这个网站的步骤来操作了。为了避免重复打字,我直接把这个博主的文章这一段给弄过来啦。


3.打开xgboost.sln工程,接下来部分介绍如何运行cli_main.cc文件

3.1 找到码源的xgboost\demo\binary_classification目录
cmd下运行下面命令生成数据
python mapfeat.py
python mknfold.py agaricus.txt 1
其中mushroom.conf是要作为cli_main.cc的主函数参数传入的(其中数据路径的参数改成绝对路径不加引号)
3.2打开vs2013工程右键xgboost项目->属性->配置属性->调试->命令行参数:mushroom.conf的绝对路径
3.3程序中打断点,debug运行xgboost项目(注意只运行xgboost,不要debug solution中的其他项目),至此就可以单步运行C++码源了!!


这里介绍的是怎么运行binary_classification模型,其实我还想知道怎么去运行其他的模型,比如多分类,经过一番折腾,发现这些命令就藏在D:\Users\chendile\Documents\Visual Studio 2017\xgboost\demo\binary_classification\runexp.sh文件中,用记事本打开就能看到了。这个文件是shell脚本,在linux上就能直接运行了,生成训练集测试集、训练模型、预测模型这些命令都已经写好了。但是在windows下稍微麻烦些,如果想知道这个文件里每一步在做什么,就看这个文件夹里的readme文件即可,其他的模型demo也是类似的方法来看。

5、可能出现的错误

我在尝试单步运行过程中出现了一个错误:
在这里插入图片描述
一般这种错误发生的原因是环境的不兼容,即电脑用的是64位的,而软件还是32位的环境。我第一个想到的解决方案是把软件的环境改成64位的,找到一个方案:
https://blog.csdn.net/u010452239/article/details/70238105/

如果你的dll、计算机、软件环境都已经是64位的了,但是无法单步执行,检查你的vs的配置项是否为release,因为只有配置项是debug的时候,我们才能进行单步调试。我的这个问题也还没解决,有解决了的小伙伴,可以留言分享你的方法,不胜感激。

参考文章:

  1. Windows下使用cmake:https://www.cnblogs.com/saucerman/articles/5608134.html
  2. xgboost官方文档:https://xgboost.readthedocs.io/en/latest/build.html
  3. windows下使用vs C++2013编译xgboost源码:https://blog.csdn.net/qq_27792379/article/details/69487258
  4. 另一种windows下用cmake和vs编译xgboost源码的方法:https://blog.csdn.net/lzv2v/article/details/71190732

猜你喜欢

转载自blog.csdn.net/weixin_39750084/article/details/83119428