在VS2022(Windows11)上添加第三方库CLAPACK,其中涉及编译、安装与使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

最近需要用C语言进行编程,涉及到矩阵以及特征值分解的的相关计算,需要调用相关的库,在网上看了很多教程,但都很乱且内容不全,由于自己配置成功后对其进行详细的整理,方便自己后续使用,适用于C/C++:

一、编译和安装CLAPACK库

步骤一:下载CLAPACK包,我使用的版本是clapack-3.2.1-CMAKE,具体官方下载链接为:http://icl.cs.utk.edu/lapack-for-windows/clapack/index.html#install
步骤二:下载CMake安装包,我使用的版本是cmake-3.30.1-windows-x86_64,具体官方下载链接为:http://www.cmake.org/
在这里插入图片描述
步骤三:将CLAPACK包和CMake安装包,放在不同的文件夹下进行解压,并建立新的文件夹。由下图可知,clapack文件夹里面包含clapack-3.2.1-CMAKE压缩包和myself文件,其中myself是我自己建的文件夹。

在这里插入图片描述
步骤四:对文件夹cmake进行打开,并解压cmake-3.30.1-windows-x86_64压缩包
在这里插入图片描述
步骤五:打开解压后的cmake-3.30.1-windows-x86_64,再打开bin文件,并点击cmake-gui.exe,进入安装目录,
进入在这里插入图片描述
进入安装目录后,在在where is the source code这里,填写clapack-3.2.1-CMAKE安装包文件夹所在的路径:例如:E:\VS_CLPACK_CMAKE\clapack\clapack-3.2.1-CMAKE,该文件夹包含CMakeLists.txt文件,用于CMake的编译之用);
where to build the binaries这里,填写新建的myself文件夹的目录,例如:E:\VS_CLPACK_CMAKE\clapack\myself;然后第一次点击configure,会让你选visual studio solution,请选择vs2022后点击确定,就会出现下面的红色背景。再点击第二次configure,红色的背景会变成白色,这时再点击generate,显示generate done,表示编译成功。
在这里插入图片描述
步骤六:点击上图中的open project,进入vs2022的工程,并在“ALL_BUILD”上右键,并选择生成选项,“INSTALL”和RUN_TEST也同样右键 ,并选择生成选项。其中INSTALL会把lib 和 .h文件放到cmake创建的目录中 一般在C:\Program Files\CLAPACK中;
在这里插入图片描述

二、在vs2022中配置路径

步骤1:

经过上面的编译和安装CLAPACK库的步骤,在C盘的C:\Program Files (x86)\CLAPACK下会有两个文件,分别是include、lib文件
在这里插入图片描述

步骤2.配置路径

*用vs2017先建个目录工程,打开项目属性,将步骤1中的路径配置到下面的设置中,具体设置如下:
在这里插入图片描述
具体设置如下:
在这里插入图片描述
在这里插入图片描述
在附加依赖项中
输入:
blasd.lib
lapackd.lib
libf2cd.lib
在这里插入图片描述

三、测试代码

下面是一个svd分解的例子

#define _CRT_SECURE_NO_WARNINGS  1
#include "stdio.h"    
#include "f2c.h"  
#include "clapack.h"  

#define SIZE 4  

int main()
{
    char JOBU;
    char JOBVT;

    int i;

    integer M = SIZE;
    integer N = SIZE;

    integer LDA = M;
    integer LDU = M;
    integer LDVT = N;
    integer LWORK;
    integer INFO;

    integer mn = min(M, N);
    integer MN = max(M, N);

    double a[SIZE * SIZE] = { 16.0, 5.0, 9.0, 4.0, 2.0, 11.0, 7.0, 14.0, 3.0, 10.0, 6.0, 15.0, 13.0, 8.0, 12.0, 1.0 };
    double s[SIZE];
    double wk[201];
    double uu[SIZE * SIZE];
    double vt[SIZE * SIZE];

    JOBU = 'A';
    JOBVT = 'A';
    LWORK = 201;

    /* Subroutine int dgesvd_(char *jobu, char *jobvt, integer *m, integer *n,
    doublereal *a, integer *lda, doublereal *s, doublereal *u, integer *
    ldu, doublereal *vt, integer *ldvt, doublereal *work, integer *lwork,
    integer *info)
    */

    dgesvd_(&JOBU, &JOBVT, &M, &N, a, &LDA, s, uu,
        &LDU, vt, &LDVT, wk, &LWORK, &INFO);

    if (INFO > 0) {
        printf("The algorithm computing SVD failed to converge\n");
        exit(1);
    }

    for (i = 0; i < SIZE; i++) {
        printf("\n s[ %d ] = %f", i, s[i]);
    }
    getchar();
    return 0;
}

```测试的结果
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9694349bb9944aca8086705430b9bc2c.png)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值