matio库下载、编译、使用

matio下载和编译

在编译一些库之前需要下载软件 Visual Studio 2022(其他版本也行)CMake编译工具

CMake:https://cmake.org/

正确编译matio库之前还需要编译2个库,下面有相关链接,一步步往下看。

HDF5库编译

hdf5官网:https://www.hdfgroup.org

网盘地址:链接:https://pan.baidu.com/s/1BSLTrto6pMguyymgOfzSCA?pwd=kmga
                  提取码:kmga

hdf5下载的是CMake版本,下载后选择对应版本bat文件运行。

会运行一段时间,耐心等待。

完成会自动退出,文件夹中会生成build文件夹使用vs打开sln文件。

先生成,生成后移动到INSTALL进行安装。

安装完成(生成截图略,以下为安装成功截图)。

注:在一个模式下进行生成和安装(编译后都选择同一模式进行)。

ZLIB库编译

zlib库:http://www.zlib.net/

我这里编译的是zlib -1.3.1,需要使用CMake编译。

在zlib文件夹中建立build文件夹,打开CMake选择路径。

配置完成后修改路径,在配置,然后生成。

完成后打开(vs打开)。

打开后生成安装(我这里统一Release模式)。

此时,两个库都已编译成功。

matio库编译

推荐github:git clone https://github.com/tbeu/matio.git

建立build文件夹,使用CMake,然后配置。

配置后修改路径,注意Debug和Release,再去配置一下。

注:在matio-master中的bulid中有一个zip压缩包,要将压缩包解压

配置后在再次修改一下zlib库的路径。

配置,生成,vs打开文件。

在生成时可能遇到这种问题,这时候使用管理员模式打开vs。

管理员打开后生成安装。

matio库编译完成。

matio库使用

引入相关库文件,头文件

在你的工程文件夹中建立一个文件夹,文件夹中在建立三个文件夹。

bin中

include中

lib中

在建立一个pri文件,将这些文件路路径加入。

# 添加动态库
LIBS += -L$$PWD/libmatio_/bin -lhdf5 -llibmatio -lzlib

# 添加可执行文件
OTHER_FILES += $$PWD/libmatio_/bin/matdump

# 添加头文件
INCLUDEPATH += $$PWD/libmatio_/include

# 添加静态库
LIBS += -L$$PWD/libmatio_/lib -lhdf5 -llibhdf5 -llibmatio -lzlib

# message($$PWD/libmatio_/include) # 打印路径

编写代码使用

以下代码是读取mat文件中的矩阵。

bool MainWindow::openMatFile(QString filePath)
{

    mat_t *pMatFile = 0;   // MAT文件句柄
    matvar_t *pMatVar = 0; // MAT文件中的变量
    double *data = nullptr;   // 存储矩阵数据的指针
    int numRows, numCols;     // 矩阵的行数和列数
    // 打开mat文件
    pMatFile = Mat_Open(filePath.toUtf8().data(), MAT_ACC_RDONLY); // matOpen 函数打开MAT文件
    if(!pMatFile)
    {
        qDebug() << "Failed to MAT file";
        return false;
    }
    QString varName;

    // 遍历所有变量
    pMatVar = Mat_VarReadNext(pMatFile);
    while (pMatVar)
    {
        // 输出变量信息
        qDebug() << "pMatVar->name: " << pMatVar->name; // 变量名称
        qDebug() << "pMatVar->rank: " << pMatVar->rank; // 变量维度
        // pMatVar->dims        存储各维度变量的行数列数 pMatVar->rank = 2 则是矩阵
        // pMatVar->class_type  表示变量的数据类型分类
        // pMatVar->data_type   实际存储的数据类型
        // pMatVar->isComplex   变量的数据是否包含复数部分
        // pMatVar->isLogical   指示变量的数据是否为逻辑类型(布尔值)
        // pMatVar->isGlobal    指示变量是否为全局变量

        // 处理二维双精度矩阵
        if (pMatVar->class_type == MAT_C_DOUBLE && pMatVar->rank == 2)
        {
            numRows = pMatVar->dims[0];
            numCols = pMatVar->dims[1];
            data = static_cast<double*>(pMatVar->data);

            // 将数据复制到Eigen矩阵
            Eigen::MatrixXd eigenMatrix(numRows, numCols);
            int i = 0;
            for (int c = 0; c < numCols; ++c)
            {
                for (int r = 0; r < numRows; ++r)
                {
                    eigenMatrix(r, c) = data[i];
                    ++i;
                }
            }

            qDebug() << "读取到的矩阵 " << pMatVar->name;
            qDebug() << eigenMatrix(0,0) << eigenMatrix(0,1) << eigenMatrix(0,2);
            qDebug() << eigenMatrix(0,0) << eigenMatrix(1,0) << eigenMatrix(2,0);
        }
        else
        {

        }

        // 释放当前变量
        Mat_VarFree(pMatVar);
        pMatVar = nullptr;

        // 继续遍历下一个变量
        pMatVar = Mat_VarReadNext(pMatFile);
    }
    // 关闭mat文件
    Mat_Close(pMatFile);
    pMatFile = 0;
    qDebug() << "file Close";
    return true;
}

原创链接:zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板_zlib.libx64-CSDN博客

https://blog.51cto.com/hongpangzi/4651061

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值