XGBOOST部署到C++上(VScode)

这段时间自己懈怠了一段时间,最近又由于项目的需求,需要完成一些模型的部署。故写下此步骤,理清思路。

一、下载XGBOOST并编译

第一步我们可以参考下面这个

XGBOOST机器学习算法模型以及C++环境部署应用(原创,保姆级教程)_xgboost c++-****博客

这里我设置的CMAKE配置是Debug

记得创建一个新的camakebuild文件夹

这里我选择的生成器是VS2019

按照上面的文章里做法之后我们就可以用啦

可以看到这里的Install里是有lib跟include的

二、XGBOOST应用

参考文章如何将python训练的XGBoost模型部署在C++环境推理_xgboost部署单片机-****博客
 

一、根据里面的教程训练好Model文件



二、替换动态链接库文件

我们可以知道现在下载的推理文件是只有.so文件,只能用于 Linux 或 macOS,而我们现在需要其在windows上运行。故我们将之前的.lib库文件复制粘贴过来。

下面就是我们最新的要推理的库文件

再次编译


再次尝试编译一下


右击All_build生成然后就在Cmake里面输出了我们的可执行文件啦.exe
 


注意:这里的.dll文件需要我们自己加上去

补充一下.lib跟.dll之间的关系

对于 .dll 文件,.lib 确实起到了类似 索引 或 引用 的作用,用于告知链接器如何与 .dll 文件进行交互。不过,在静态链接的情况下,.lib 文件直接包含了库的实现代码,并不会指向 .dll 文件。


三、修改脚本

.bat参考代码

@echo off
cd E:\convert\XGBoost-detect\cmakebuild\Debug
xgb-infer.exe


原来的是.sh文件,但是其只能在Linux上运行,如果想在Windows上运行,我们必须这样改为.bat文件。

右键run就可以运行啦,很开心,这次成功了!!


三、Debug

参考文章【C/C++】在VSCode中配置C/C++环境(使用gdb和code-runner两种方式配置)_vscode code runner-****博客

由于我们目前只是简单的可执行,但我们还是需要对其进行debug,这样才能更好的写我们的程序。

tasks.json

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: g++.exe 生成活动文件",
			"command": "D:\\mingw64\\bin\\g++.exe",
			"args": [
				"-fdiagnostics-color=always",  // 使编译输出更具可读性
				"-g",                          // 生成调试信息
				"E:/convert/XGBoost-detect/xgb-infer.cpp", // 源文件路径
				"-o", "E:/convert/XGBoost-detect/xgb-infer.exe", // 输出可执行文件路径
				"-I", "E:/convert/XGBoost-detect/xgb-include",  // xgboost 头文件路径
				"-I", "./eigen-3.3.7",         // Eigen 库头文件路径(如果有)
				"-L", "E:/convert/XGBoost-detect/xgb-lib",  // xgboost 库文件路径
				"-lxgboost"  // 链接 xgboost 库
			],
			"options": {
				"cwd": "E:/convert/XGBoost-detect"  // 设置当前工作目录为源文件所在目录
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": "build",  // 设置任务组
			"detail": "编译器: D:\\mingw64\\bin\\g++.exe"
		}
	]
}

 launch.json

{
	"configurations": [
		{
			"name": "(gdb) 启动",
			"type": "cppdbg",
			"request": "launch",
			"program": "E:/convert/XGBoost-detect/xgb-infer.exe",  // 指向可执行文件的路径
			"args": [],
			"stopAtEntry": false,
			"cwd": "E:/convert/XGBoost-detect",  // 设置当前工作目录为源文件所在目录
			"environment": [],
			"externalConsole": true,  // 启动外部控制台
			"MIMode": "gdb",
			"miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe",  // gdb 调试器路径
			"setupCommands": [
				{
					"description": "为 gdb 启用整齐打印",
					"text": "-enable-pretty-printing",
					"ignoreFailures": true
				},
				{
					"description": "将反汇编风格设置为 Intel",
					"text": "-gdb-set disassembly-flavor intel",
					"ignoreFailures": true
				}
			],
			"preLaunchTask": "C/C++: g++.exe 生成活动文件"  // 编译任务
		}
	]
}

总的来说,这两个配置文件之间的关系是:tasks.json 负责定义如何编译项目,而 launch.json 则定义如何启动调试。在 VS Code 中,当你点击调试按钮时,launch.json 会首先执行 tasks.json 中的编译任务,然后启动调试。

然后就成功啦! 

四、剩余的问题

本来还想一键run code运行发现不可以,不知道怎么回事,有解决这个问题的小伙伴吗?

上一篇:003 STM32基础、架构以及资料介绍——常识


下一篇:在Linux下配置gitee与Github的远程仓库