在Ubuntu上安装OpenBLAS和Eigen

安装 openblas

直接使用 apt-get 命令即可安装:

shell 复制代码
sudo apt-get install libopenblas-dev

检查是否安装成功,可以用下面的示例代码 example.cpp

cpp 复制代码
#include <stdio.h>
#include <stdlib.h>
#include "cblas.h"

int main() {
    const int n = 10;  // Array size
    const double da = 10; // Double constant
    double dx[n]; // Input double array
    double dy[n]; // Output double array

    // Initialize the arrays
    for (int i = 0; i < n; ++i) {
        dx[i] = 9 - i;
        dy[i] = i;
    }

    // Print the original dy array
    printf("Original dy: ");
    for (int i = 0; i < n; ++i) {
        printf("%f ", dy[i]);
    }
    printf("\n");

    // Perform daxpy operation: dy = da * dx + dy
    cblas_daxpy(n, da, dx, 1, dy, 1);

    // Print the modified dy array
    printf("Modified dy: ");
    for (int i = 0; i < n; ++i) {
        printf("%f ", dy[i]);
    }
    printf("\n");

    return 0;
}

编译并运行:

shell 复制代码
~$ gcc example.cpp -lopenblas -o example
~$ ./example
Original dy: 0.000000 1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 
Modified dy: 90.000000 81.000000 72.000000 63.000000 54.000000 45.000000 36.000000 27.000000 18.000000 9.000000

安装 Eigen

Eigen 官网:https://eigen.tuxfamily.org/index.php?title=Main_Page

在官网找一个源码下载,解压后安装:

shell 复制代码
~$ wget https://gitlab.com/libeigen/eigen/-/archive/3.4.0/eigen-3.4.0.tar.gz
~$ tar -zxvf eigen-3.4.0.tar.gz
~$ mkdir build
~$ cd build
~$ cmake ..
~$ sudo make install

eigen3会被默认安装到 /usr/local/include/eigen3 路径下,需要移动到 /usr/local/include 下面:

shell 复制代码
~$ sudo mv /usr/local/include/eigen3/* /usr/local/include/

然后把 /usr/local/include/eigen3 删除掉:

shell 复制代码
~$ sudo rm -rf /usr/local/include/eigen3

最后来跑一下官方示例 my_program.cpp

cpp 复制代码
#include <iostream>
#include <Eigen/Dense>

using Eigen::MatrixXd;

int main()
{
    MatrixXd m(2, 2);
    m(0, 0) = 3;
    m(1, 0) = 2.5;
    m(0, 1) = -1;
    m(1, 1) = m(1, 0) + m(0, 1);
    std::cout << m << std::endl;
}

编译运行:

shell 复制代码
~$ g++ my_program.cpp -o my_program
~$ ./my_program
  3  -1
2.5 1.5
相关推荐
云小逸5 分钟前
C++ 第一阶段:对象、内存与生命周期
开发语言·c++
夜航海图8 分钟前
S-57 数据解剖:把一个 ENC 文件拆给你看
c++
(Charon)10 分钟前
【C++】网络缓冲区设计(三):Chain Buffer链式缓冲区、动态扩容与跨节点读写
服务器·c++
软行2 小时前
LeetCode 每日一题 3876. 构造奇偶一致的数组 II
c++·算法·leetcode
繁星蓝雨2 小时前
C++设计原理———重载(extern “C“的由来、顺序依赖、语义依赖、overload、名称修饰符、对象操作、运算符重载、新增运算符、枚举和布尔类型)
c语言·c++·extern c·overload·重载·语义依赖·顺序依赖
handler013 小时前
【Linux】虚拟地址空间解析
linux·运维·c++·线程·进程·虚拟地址空间·虚拟地址
(Charon)3 小时前
【C++】网络缓冲区设计(二):Ring Buffer环形缓冲区、head/tail与跨界读写
开发语言·c++
码匠许师傅3 小时前
【设计模式精讲】24.观察者模式(Observer)
c++·观察者模式·设计模式·uml
imgsq3 小时前
S-57 数据解剖:把一个 ENC 文件拆给你看
c++·数据可视化
迷茫、Peanut3 小时前
中断的时钟
c++