gpt4 book ai didi

c++ - CBLAS_ORDER 不是 gcc 的类或命名空间,但在 VS2010 (Intel C++) 中编译良好

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:41 24 4
gpt4 key购买 nike

我对 C++ 比较陌生(我主要有 C# 背景)。我收到了一些要从 Windows 移植到 Linux 的代码,但是虽然我可以让 Visual Studio 2010 来编译它(使用 Intel C++ 编译器),但我无法让它与 Linux 中的 gcc 或 Intel C++ Linux 编译器一起工作(两者都给出相同的错误)。我不认为这是英特尔特定的功能不起作用,这就是为什么我在这里而不是在英特尔论坛上提问。

我尝试编译的文件 DoubleMatrixOperations.cpp 是:

#include <ipp.h> 
#include <mkl.h>

extern "C"
{
void Multiply_mdvd_vd(int rows, int cols, double* vout, double* m, double* v, bool transpose)
{
cblas_dgemv(
CBLAS_ORDER::CblasRowMajor,
transpose ? CBLAS_TRANSPOSE::CblasTrans : CBLAS_TRANSPOSE::CblasNoTrans,
rows, cols, 1.0, m, cols, v, 1, 0.0, vout, 1);
}
}

编译器的输出是:

$ gcc DoubleMatrixOperations.cpp -I$IPPROOT/include
DoubleMatrixOperations.cpp: In function âvoid Multiply_mdvd_vd(int, int, double*, double*, double*, bool)â:
DoubleMatrixOperations.cpp:9:4: error: âCBLAS_ORDERâ is not a class or namespace
DoubleMatrixOperations.cpp:10:16: error: âCBLAS_TRANSPOSEâ is not a class or namespace
DoubleMatrixOperations.cpp:10:46: error: âCBLAS_TRANSPOSEâ is not a class or namespace

如果这是一个愚蠢的问题,请提前道歉!

谢谢,托马斯

最佳答案

编辑:正如hivert在评论部分正确指出的那样,当您使用C++11时,这个问题不存在。不过,下面的解决方案适用于较旧的编译器。

<小时/>

由于 CBLAS_ORDERCBLAS_TRANSPOSE 是枚举,而不是类/命名空间,因此它们不引入范围。这就是为什么您应该删除名称限定符:

cblas_dgemv(CblasRowMajor, transpose ? CblasTrans : CblasNoTrans, rows, cols, 1.0, m, cols, v, 1, 0.0, vout, 1);

但是,VC 编译器应该编译此代码,但是它也应该 print some warning .

关于c++ - CBLAS_ORDER 不是 gcc 的类或命名空间,但在 VS2010 (Intel C++) 中编译良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17853501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com