C++配置matio第三方库详细教程
目录
配置环境:Window11、VS2022、CMake、Release(Debug版类推)
.mat文件是MATLAB专门的二进制文件,比.txt和.csv更紧凑,最近小编遇到了.mat文件,以为C++没有办法处理,但是我看到了参考文献的那篇博客,复现了一遍,也把一些过程讲得更详细了。
C++用来处理.mat文件的第三方库,这次讲的是matio库,需要配置一堆东西,官方在github上没有现成的可以直接用,只能自己配,这样配好的环境明显更适合本地环境。
CMake安装(如果没有的)
我这里选择的是安装包程序

找到这个包,双击运行

这里全部默认然后下一步,只有下图需要勾选同意许可证

选择Install安装

点击Finish或者直接关掉都可以

编译zlib库
找到图中所示的.zip文件,点击下载

下载完后,找到下载的zip文件,解压到一个地方,自己要记得在哪,这里小编解压到D盘

找到你前面下的CMake,如果没有修改路径的话,应该是在C盘的Program Files的CMake的bin中
双击cmake-gui,运行可视化CMake界面,
第一个路径是需要编译的代码,第二个路径是编译结果存放的地方
这里我们在原来的代码中新建一个build文件夹,用来存放编译结果

勾选Grouped和Advanced,前者会把平铺的参数整理起来,后者会显示更多的高级信息,方便查找东西,一开始接触CMake不勾选这两个容易出错,建议勾选
接着修改配置

选择你要配置的Visual Studio版本,和使用x64还是x86,最后点击Finish完成修改,一完成修改CMake就开始工作了

程序跑完后会生成一些参数,这些参数用于后续的生成,我们点击INSTALL,点击修改路径,在原生成路径再添加一个install,修改成下图第一步,再选择Configure和Generate
D:/coding/vendor/zlib131/zlib-1.3.1/build/install/bin
D:/coding/vendor/zlib131/zlib-1.3.1/build/install/lib
D:/coding/vendor/zlib131/zlib-1.3.1/build/install/share/man
D:/coding/vendor/zlib131/zlib-1.3.1/build/install/share/pkgconfig

Open Project亮了,点击打开Visual Studio

根据需要选择管理器(Debug/Release),小编演示Release版本,右键INSTALL项目,选择生成

输出提示生成成功

可以看到,在build目录下的install中,生成了四个文件夹

安装HDF5库
下载预编译包,官网:HDF5下载地址
选择hdf5-2.0.0-win-vs2022_cl.msi文件,试过了,自己编译很难编译成功

双击运行文件,出现下载路径找个位置装,知道在哪里就行
后面需要bin和lib,看一下下图中的文件和文件夹是不是差不多?是就是安装完整了

编译matio库
下载matio,官网:Release matio 1.5.29 · tbeu/matio
这里选择zip文件

重复上面的过程

要改三处,一处是zlib中,添加include目录和libary目录。同样还是因为小编是Releas版的,所以只添加release的路径
D:/coding/vendor/zlib131/zlib-1.3.1/build/install/include
D:/coding/vendor/zlib131/zlib-1.3.1/build/install/lib/zlib.lib

一处是这个HDF5的圈起来的两个路径需要添加,因为小编直接默认安装,CMake找到了,没有的要自己看
你的文件夹/HDF5/2.0.0/bin/h5diff.exe
你的文件夹/HDF5/2.0.0/cmake

最后在CMAKE组中找到CMAKE_INSTALL_PREFIX,可以通过搜索框找快一点

点击下面的三个按钮都点一遍
出现这样是对的,如果报错说什么没找到还是什么的,像lib,直接指定lib文件

重复上面的生成,选Release、右键INSTALL,生成

成功!可以先不管到底完不完整,下面库存放配置时会涉及,缺了再回溯

测试
测试代码
#include <stdio.h>
#include <matio.h>
int main() {
double test_data[2][3] = { {1.1, 2.2, 3.3}, {4.4, 5.5, 6.6} };
size_t dims[2] = { 2, 3 };
mat_t* matfp = NULL;
matvar_t* matvar = NULL;
// 若没有HDF5,将MAT_FT_MAT73改为MAT_FT_MAT5
matfp = Mat_CreateVer("test.mat", NULL, MAT_FT_MAT73);
if (matfp == NULL) {
printf("错误:创建.mat文件失败!\n");
return -1;
}
printf("成功创建test_matio.mat文件\n");
matvar = Mat_VarCreate("my_data", MAT_C_DOUBLE, MAT_T_DOUBLE, 2, dims, test_data, 0);
if (matvar == NULL) {
printf("错误:创建mat变量失败!\n");
Mat_Close(matfp);
return -1;
}
if (Mat_VarWrite(matfp, matvar, MAT_COMPRESSION_NONE) != 0) {
printf("错误:写入变量到.mat文件失败!\n");
Mat_VarFree(matvar);
Mat_Close(matfp);
return -1;
}
printf("成功写入数组到.mat文件\n");
// 读取变量 + 直接访问data成员
matvar_t* read_var = Mat_VarRead(matfp, "my_data");
if (read_var == NULL) {
printf("错误:读取变量失败!\n");
Mat_VarFree(matvar);
Mat_Close(matfp);
return -1;
}
double* read_data = (double*)read_var->data;
printf("读取到的数组内容:\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%.1f ", read_data[i * 3 + j]);
}
printf("\n");
}
// 释放资源
Mat_VarFree(matvar);
Mat_VarFree(read_var);
Mat_Close(matfp);
printf("\nmatio库测试成功!\n");
system("pause");
return 0;
}
创建一个项目,把代码放到.c或.cpp文件中
库存放配置
按照下图的目录树,将需要的文件复制过来,都是在小编展示过的对应的目录下的(例如,bin需要的就在对应库的bin中)

项目配置
配置链接器
点链接器->常规->附加库目录框的最右边(有个箭头,点击后选中编辑)->输入这两个路径,点击确定,否则修改无效,根据个人实际情况添加路径
$(SolutionDir)$(ProjectName)/vendor/bin
$(SolutionDir)$(ProjectName)/vendor/lib


到输入中添加静态库
hdf5.lib
hdf5_hl.lib
zlib.lib
libmatio.lib

配置C/C++
$(SolutionDir)$(ProjectName)/vendor/include

测试结果
要选中release管理器,再运行

解决:由于matio.h设计时,使用了dll去减轻程序空间大小,所以需要在生成的程序下添加需要的dll,添加到生成的程序的同一目录下,默认是x64/Release

再次运行

可见成功
参考文献
更多推荐

所有评论(0)