致命错误C1083:无法打开包含文件:' complex.h':没有这样的文件或目录.. \ lapacke \ include \ lapacke.h

时间:2014-11-14 15:40:08

标签: c++ visual-studio-2008 fatal-error lapack lapacke

我构建了DLL&我的Visual Studio 2008的LAPACKE库基于以下链接:

http://icl.cs.utk.edu/lapack-for-windows/lapack/

在构建LAPACKE之后,我测试如下,它通过了测试:

enter image description here

构建完成后,我有以下文件:

enter image description here enter image description here enter image description here enter image description here

我在Visual Studio 2008中使用了以下提示:

enter image description here

现在我有以下Visual Studio 2008项目:

enter image description here

我的项目中有以下C ++代码:

enter image description here enter image description here enter image description here

当我注释掉#include "lapacke.h"行可执行文件时,我得到以下控制台输出:

enter image description here

但是,当我不评论#include "lapacke.h"时,我会收到以下错误:

enter image description here

错误位置是lapacke.h的第73行,如下所示:

enter image description here

我感谢任何帮助。


修改

即使在#include <cstdlib>之前加入#include "lapacke.h",也会发生同样的错误:

enter image description here


修改

在以下链接中,有些人讨论了一个看似相关的问题:

http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=2284

http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=4221


修改

在文件lapacke.h中,以下语句可用于复杂类型。

/* Complex types are structures equivalent to the
* Fortran complex types COMPLEX(4) and COMPLEX(8).
*
* One can also redefine the types with his own types
* for example by including in the code definitions like
*
* #define lapack_complex_float std::complex<float>
* #define lapack_complex_double std::complex<double>
*
* or define these types in the command line:
*
* -Dlapack_complex_float="std::complex<float>"
* -Dlapack_complex_double="std::complex<double>"
*/

#ifndef LAPACK_COMPLEX_CUSTOM

/* Complex type (single precision) */
#ifndef lapack_complex_float
#include <complex.h>
#define lapack_complex_float    float _Complex
#endif

#ifndef lapack_complex_float_real
#define lapack_complex_float_real(z)       (creal(z))
#endif

#ifndef lapack_complex_float_imag
#define lapack_complex_float_imag(z)       (cimag(z))
#endif

lapack_complex_float lapack_make_complex_float( float re, float im );

/* Complex type (double precision) */
#ifndef lapack_complex_double
#include <complex.h>
#define lapack_complex_double   double _Complex
#endif

#ifndef lapack_complex_double_real
#define lapack_complex_double_real(z)      (creal(z))
#endif

#ifndef lapack_complex_double_imag
#define lapack_complex_double_imag(z)       (cimag(z))
#endif

lapack_complex_double lapack_make_complex_double( double re, double im );

#endif

我修改了头文件如下:

enter image description here

但是我收到以下错误:

enter image description here

以上错误发生在以下位置:

enter image description here

我不确定如何解决此错误。


修改

最后通过添加#include <complex>来解决问题,如下所示。顺便说一下,这篇文章帮助我弄明白了:MinGW error: 'min' is not a member of 'std'

enter image description here

重建没有任何问题:

enter image description here

1 个答案:

答案 0 :(得分:1)

Lapacke是C代码,而不是C ++。 Visual C ++对C的支持有限,不支持_Complex。在C ++中,您使用std::complex<float>

根据您显示的代码,定义LAPACK_COMPLEX_CUSTOM可能会跳过_Complex的使用。

PS。请在您的问题中包含源代码,而不是图片。