我在项目中需要一些线性代数,并希望为此使用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覆盖复杂变量类型定义