Я хочу написать программу для сравнения библиотек 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/compilers_and_libraries_2019.1.144/mac/mkl/include/mkl.h:31: /opt/intel/compilers_and_libraries_2019.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' главной функции, чтобы использовать любую библиотеку.