CBLASèU ORDER不是带有gcc的类或命名空间,但在VS2010(英特尔C+;+;)中编译良好 我对C++比较陌生(我主要有C背景)。我已经得到了一些代码,这些代码将被移植到Windows上,但是当我可以通过Visual Studio 2010编译它(用英特尔C++编译器)时,我不能让它在Linux中与GCC一起工作,或者英特尔C++ Linux编译器(两者都给出相同的错误)。我不认为这是一个英特尔特定的功能不起作用,这就是为什么我在这里而不是在英特尔论坛上问

CBLASèU ORDER不是带有gcc的类或命名空间,但在VS2010(英特尔C+;+;)中编译良好 我对C++比较陌生(我主要有C背景)。我已经得到了一些代码,这些代码将被移植到Windows上,但是当我可以通过Visual Studio 2010编译它(用英特尔C++编译器)时,我不能让它在Linux中与GCC一起工作,或者英特尔C++ Linux编译器(两者都给出相同的错误)。我不认为这是一个英特尔特定的功能不起作用,这就是为什么我在这里而不是在英特尔论坛上问,c++,linux,gcc,intel,intel-mkl,C++,Linux,Gcc,Intel,Intel Mkl,我试图编译的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, transpos

我试图编译的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); 
} 
}
如果这是一个愚蠢的问题,请提前道歉

谢谢, Thomas

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


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

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

不过,VC编译器应该编译这段代码,但是它也应该编译。

非常感谢,这似乎已经排序好了!
cblas_dgemv(CblasRowMajor, transpose ? CblasTrans : CblasNoTrans, rows, cols, 1.0, m, cols, v, 1, 0.0, vout, 1);