编译c++时链接openblas和mkl库
Link both openblas and mkl library while compiling c++
我想写一个程序来比较openblas和mkl库的矩阵乘法,但我在链接这两个库时似乎遇到了问题,因为它们共享相同的函数,因此与g++产生了"冲突错误"。
它们似乎使用在不同的cpp文件中单独运行
g++ matrixmult_openblas.cpp -I /usr/local/opt/OpenBLAS/include/ -L/usr/local/opt/OpenBLAS/lib -lopenblas
和
g++ matrixmult_mkl.cpp -L${MKLROOT}/lib -Wl,-rpath,${MKLROOT}/lib -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -lmkl_blacs_mpich_ilp64 -liomp5 -lpthread -lm -ldl
如何在单个cpp文件中编译它们?我使用过类似的名称空间
namespace openblas
{
#include <cblas.h>
}
namespace mkl
{
#include <mkl.h>
}
当我使用两个链接器编译它们时,比如
g++ matrixmult.cpp -I /usr/local/opt/OpenBLAS/include/ -L/usr/local/opt/OpenBLAS/lib -lopenblas -L${MKLROOT}/lib -Wl,-rpath,${MKLROOT}/lib -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -lmkl_blacs_mpich_ilp64 -liomp5 -lpthread -lm -ldl
我收到了类似的错误
在/opt/intel/compailers_and_libraries_20199.1.144/mac/mkl/include/mkl.h:31中包含的文件中:/opt/intel/compailers_and_libraries_20199.1.144/mac/mkl/include/mkl_cblas.h:255:6:错误:"cblas_sgemv"的类型冲突void cblas_sgemv(const cblas_LAYOUT LAYOUT,^/usr/local/opt/OpenBLAS/include/cblas.h:125:6:注意:前面的声明在这里
请帮我做这件事。我想要一个输出文件,在其中我可以将参数"openblas"或"mkl"传递给主函数以使用任何库。
我收到了类似的错误
In file included from /opt/intel/compilers_and_libraries_2019.1.144/mac/mkl/include/mkl.h:31:
/opt/intel/compailers_and_libraries_20199.1.144/mac/mkl/include/mkl_cblas.h:255:6:错误:"cblas_sgemv"的类型冲突void cblas_sgemv(constCBLAS_LAYOUT布局,^/usr/local/opt/OpenBLAS/include/CBLAS.h:125:6:注意:以前的申报在这里
你很幸运。在其他情况下,您可能已经成功编译了程序而没有出现错误,然后在运行时出现意外行为。
如何在单个cpp文件中编译它们?
你没有。OpenBLAS和MKL提供了具有相同名称并具有C链接的例程。即使它们有兼容的类型,编译后的程序也只能使用每对中的一个。您不能通过操作声明或头文件来解决这个问题,因为这些声明或头需要与实际编译的函数匹配才能使用。
我想写一个程序来比较矩阵乘法的openblas和mkl库
您必须满足于编写两个程序,每个库一个。使它们尽可能相似,并比较它们在相同(或等效)输入上的行为。
- 将gsl c++程序与"英特尔MKL"链接
- 如何指示 CMAKE 在 Visual Studio 中使用英特尔 MKL
- 在本征C++中 MKL 的函数"zgges"等价物是多少?
- 编译 OpenBLAS C++项目会产生错误"Undefined symbols for architecture x86_64"
- 检测 Visual Studio 项目的属性中是否启用了英特尔 MKL
- 如何使用Cmake在Linux上设置MKL
- 无法运行使用 MKL 编译的 TensorFlow
- 特征运算符如何在内部解释为 MKL 函数?
- 使用特征/英特尔 MKL 求解稀疏线性系统
- 加速 RcppArmadillo:如何在 R 包中链接到 OpenBlas
- 将OpenBLAS与Qt Creator项目链接
- Cython通过vdMul调用MKL在元素乘法上崩溃
- Use Eigen + Intel MKL + Pardiso
- OpenBLAS 只为一个例程设置线程数
- 在 MKL 库中设置 openmp
- 使用 MKL 稀疏矩阵向量乘法
- 使用 MKL 编译 Eigen3
- 英特尔 MKL 稀疏 QR 求解 C++ 返回未初始化错误
- 编译c++时链接openblas和mkl库
- 比numpy/scipy openblas慢性 mkl或开放式布拉斯