CBLAS_ORDER不是带有gcc的类或命名空间,但在VS2010(英特尔C++)中编译良好
CBLAS_ORDER is not a class or namespace with gcc, but compiles fine in VS2010 (Intel C++)
我对C++比较陌生(我主要有C#背景)。我收到了一些要从Windows移植到Linux的代码,但虽然我可以让Visual Studio 2010编译它(使用英特尔C++编译器),但我无法让它在Linux中使用gcc或英特尔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
如果这是一个愚蠢的问题,请提前道歉!
谢谢,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编译器应该编译此代码,但它还应该打印一些警告。
相关文章:
- 编译要在英特尔Hyperscan中使用的.cc文件时出现问题
- 将gsl c++程序与"英特尔MKL"链接
- 使用英特尔 PIN 修改寄存器
- 使用英特尔内联函数将打包的 8 位整数乘以浮点数向量
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 英特尔 TBB 程序不会终止,可能会误用参考计数器
- 将"-01"替换为"-02" 英特尔编译器选项会导致 FPE 在较小的 for 循环行程计数中抛出
- 在 Azure DevOps 构建管道中使用英特尔C++编译器为 Linux 环境构建C++代码
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- 如何要求 macports 用英特尔编译器包装 openmpi?
- 实施英特尔实感和 SDL2 时出现问题
- OpenGL 片段着色器未在英特尔 HD 4000 显卡上编译
- 英特尔将指令存储在重叠的内存区域
- 如何指示 CMAKE 在 Visual Studio 中使用英特尔 MKL
- 使用英特尔内部函数 (AVX) 中的混合说明
- 英特尔 PIN:如何查看推测性指令?
- 我正在尝试解决英特尔架构并行基础课程中关于 Coursera 的一项作业
- 使用 task_group 的英特尔线程构建模块性能不佳(新用户)
- VS2010/英特尔 Fortran 找不到多个定义的符号
- CBLAS_ORDER不是带有gcc的类或命名空间,但在VS2010(英特尔C++)中编译良好