在Visual Studio中使用OpenBlas Lapacke

Using OpenBLAS LAPACKE in Visual Studio

本文关键字:OpenBlas Lapacke Visual Studio      更新时间:2023-10-16

我在项目中需要一些线性代数,并希望为此使用OpenBlas。我下载了预编译版本(64位版本),并将其打开给我的ProjectFolder。在Visual Studio中,我在我的项目中添加了Incluber-,bin-和lib folder,并毫无问题地运行了这个示例。

接下来,我想查看拉帕克(Lapack),所以我将lapacke.h添加到了Incluph,该目录与CBLAS.H相同,并包含在官方下载中。但是现在,对于每个功能,我都会遇到数百个错误,就好像丢失了一个lib文件一样。例如。对于此行

85 lapack_complex_float lapack_make_complex_float( float re, float im );

我得到

PATHincludelapacke.h(85): error C2146: syntax error: missing ';' before identifier 'lapack_make_complex_float'

我找不到有关如何设置OpenBlas/lapack的更多信息,他们通常只是说"包括文件"。否则,CBLA示例也不会运行。和(相关的)示例我只能使用cblas.h,而不是lapacke.h

有人可以告诉我我做错了什么?

问题是OpenBlas默认情况下使用C99 _ Complex。视觉C 不支持这。您可以在包含lapacke.h:

之前使用标准库定义来解决此问题。
#include <complex>
#define lapack_complex_float std::complex<float>
#define lapack_complex_double std::complex<double>
#include <lapacke.h>

使用std ::综合体是有问题的

Microsoft编译器的现代版本(例如Vstudio 2022中的一个)支持类似的" _complex"机制。因此,我在" lapacke.h"

之前包括以下标头文件
#ifdef _MSC_VER
#include <complex.h>
#define LAPACK_COMPLEX_CUSTOM
typedef _Dcomplex lapack_complex_float;
typedef _Fcomplex lapack_complex_double;
#define lapack_complex_float_real(z)       (real(z))
#define lapack_complex_float_imag(z)       (imag(z))
#endif // _MSC_VER

请参阅lapack.h标头文件,该文件与OpenBlas一起发货#define Lapack_complex_custom覆盖复杂变量类型定义