这段时间自己懈怠了一段时间,最近又由于项目的需求,需要完成一些模型的部署。故写下此步骤,理清思路。
一、下载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运行发现不可以,不知道怎么回事,有解决这个问题的小伙伴吗?