linux — CBLAS_ORDER не является классом или пространством имен с gcc, но прекрасно компилируется в VS2010 (Intel C ++)

Я относительно новичок в C ++ (в основном у меня есть опыт работы с C #). Мне дали код для переноса из Windows в Linux, но, хотя я могу заставить Visual Studio 2010 скомпилировать его (с помощью компилятора Intel C ++), я не могу заставить его работать с gcc в linux, или компилятор Intel C ++ Linux (оба дают одинаковую ошибку). Я не думаю, что это специфическая функция Intel, которая не работает, поэтому я спрашиваю здесь, а не на форумах Intel.

Файл 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

Заранее извиняюсь, если это глупый вопрос!

Спасибо,
Томас

0

Решение

Редактировать: Как Ивер Правильно указано в разделе комментариев, эта проблема не существует, когда вы используете 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 должен скомпилировать этот код, но это также должно распечатать предупреждение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]