Windows环境下c++数据分析领域开发入门(3-lapack安装)

上一章介绍了Eigen(c++中的numpy)的按住。今天要介绍Lapack (c++中的scipy)安装。

Lapack主要包含了矩阵的一些求解优化计算,安装的时候会发现它包含了三块,LABS、LAPACK、LAPACKE三个东西,这三个东西都是一起安装的。主要安装流程如下。

1.下载

进入官网,找到有关Windows的介绍

LAPACK — Linear Algebra PACKage

点击进入详细介绍页面

进入,就是有关windows下如何安装lapack的介绍

根据操作流程,我们先下载下来压缩包

压缩包长这样

然后找个地方解压,我的路径是E:\lapack-3.12.1

然后再找个地方新建一个路径,相当于我们传统的安装位置,这里我使用的是E:\c_plus_packet

接下来就可以准备安装了

2. 安装

第一步,cmd下执行cmake-gui

弹出cmake-gui页面

选择编译的小配置

运行后,选择要安装的组件,按照官网提示,勾选三个

运行后,点击生成

结束了关闭窗口就行。进入你的安装路径下(如前文所述,我的安装路径是E:\c_plus_packet),会发现生成了一堆东西,其中就有Makefile文件,说明可以下一步了。

cmd进入这个路径,然后执行

make

然后就开始编译,大概等个一个小时,不报错就是成功。

安装成功后,会生成三个文件夹,一个是装H头文件的include,一个是装动态库.dll文件的bin,一个是装静态库.lib文件的lib

我们调用的时候有两种方式

a. 调用静态库:使用include文件夹 + lib文件夹

b. 调用动态库:使用include文件夹 + bin文件夹

3. 准备一个lapack案例

这里我们用带状矩阵求解作为一个使用案例,函数的详细介绍如下

C++带状矩阵求解:LAPACKE_dgbsv_c++ lapack-优快云博客

我们先建立一个文件夹,里面存有一个空文件夹build、一个main.cpp文件、一个CMakeLists.txt文件。在main.cpp文件中写入

#include <iostream>
#include <vector>
#include <lapacke.h>
 
int main(){
    lapack_int n = 5;                 // 矩阵A阶数
    lapack_int kl = 1;                // 下对角线数
    lapack_int ku = 2;                // 上对角线数
    lapack_int ldab = 2*kl + ku + 1;  // 代码所需的参数,直接按公式代入即可
    lapack_int nrhs = 1;              // 矩阵B 列数
    lapack_int ipiv[n];               // 代码所需的固定参数,置换矩阵信息,无需更改
 
    std::vector<double> ab={ 0, 0, 0, 4,-1,          // 矩阵A的输入格式
                             0, 0,-1, 4,-1,
                             0, 2,-1, 4,-1,
                             0, 2,-1, 4,-1,
                             0, 2,-1, 4, 0 };
    std::vector<double> b={1, 2, 3, 4, 5};           // 矩阵B
 
    lapack_int info = LAPACKE_dgbsv(LAPACK_COL_MAJOR, n, kl, ku, nrhs, ab.data(), ldab, ipiv, b.data(), n);
 
    if (info == 0) {
        for (int i = 0; i < n; ++i) {std::cout << "X[" << i << "] = " << b[i] << std::endl;}
    } else if (info > 0) {
        std::cout << "The matrix A is singular. U(" << info << "," << info << ") is exactly zero." << std::endl;
    } else {
        std::cout << "Illegal argument value at position " << -info << std::endl;
    }
    
    return 0;
}

然后准备运行。

4. 使用动态库的运行方法

在cmake文件中,写入如下内容

cmake_minimum_required(VERSION 4.1)
project(test_lapack)

# 1. 导入include的.h文件路径,安装路径的在include文件夹下
include_directories("E:/c_plus_packet/include") 

# 2. 导入动态库dll文件路径,安装路径的在bin文件夹下
link_directories(E:/c_plus_packet/bin)

add_executable(main main.cpp)

# 3. 链接库
target_link_libraries(main PRIVATE LAPACKE LAPACK BLAS)

在build文件夹下,运行cmd,执行cmake

cmake .. -G "Unix Makefiles"
make

不报错就是成功。生成main.exe文件

然后最重要一步,将bin链接的文件夹下的dll文件复制到exe同路径下才能运行。

具体而言就是,把E:/c_plus_packet/bin链接库中的三个dll文件复制

粘贴到build文件夹中。保证main.exe三个dll文件同一个文件夹下

最后运行main.exe

不报错就是成功。

5. 使用静态库的运行方法

在cmake文件中,写入如下内容

cmake_minimum_required(VERSION 4.1)
project(test_lapack)

# 导入.h文件
include_directories("E:/c_plus_packet/include")

# 导入包
link_libraries(LAPACKE LAPACK BLAS)
# 写入包的位置
link_directories(E:/c_plus_packet/lib)

add_executable(main main.cpp)

其余步骤和上面是一样的,最后也是需要把dll文件复制到main.exe文件夹下才能运行。

如果每次都懒得复制也可以把E:/c_plus_packet/bin放在环境变量里

ps: 很多过程都是我试出来的,可能不是很正规,还望大家批评指正。不过我目前还比较疑惑,为什么静态的调用还是需要复制dll文件,如果有大佬,希望可以解惑一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值