Eigen3 no puede encontrar mkl.h en Linux.
Estoy tratando de compilar un programa con soporte MKL en Eigen3. Sin embargo, sigo encontrando
/usr/include/eigen3/Eigen/src/Core/util/MKL_support.h:58:13: error fatal: archivo ‘mkl.h’ no encontrado
Tengo MKL instalado a través de oneapi y MKL_ROOT está definido correctamente como variable de entorno. mkl.h está en el sistema en /opt/intel/oneapi/mkl/latest/include
El archivo CMakeLists.txt tiene la siguiente información:
find_package(Eigen3 3.3 REQUIRED)
find_package(BLAS REQUIRED)
find_package(MKL REQUIRED)
set(BLA_VENDOR Intel10_64lp)
add_executable(${TARGET_NAME} ${SOURCE_FILES} ${INCLUDE_FILES})
target_sources(${TARGET_NAME}
PRIVATE main.cpp
test_mkl.cpp
)
add_definitions(-DEIGEN_USE_MKL_ALL)
target_link_libraries(${TARGET_NAME}
PRIVATE Eigen3::Eigen ${BLAS_LIBRARIES}
${MKL_LIBRARIES})
message("BLAS:")
message("${BLAS_INCLUDE_DIRS}")
if (MKL_FOUND)
message("MKL")
message("${MKL_INCLUDE_DIRS}")
endif()
target_include_directories(${TARGET_NAME}
PRIVATE ../../include
PRIVATE ${EIGEN3_INCLUDE_DIRS}
PRIVATE ${MKL_INCLUDE_DIRS}
PRIVATE ${BLAS_INCLUDE_DIRS})
MKL se encuentra, sin embargo MKLINCLUDEDIRS está vacío. ¿Cómo puedo hacer que esto tome correctamente los directorios de inclusión de MKL?
davy.ai
Parece que el comando find_package para MKL no está detectando correctamente los directorios de inclusión. Para solucionar esto, puedes intentar establecer manualmente los directorios de inclusión utilizando lo siguiente:
Puedes agregar esta línea después del comando target_include_directories en el archivo CMakeLists.txt.
Si esto no funciona, también puedes intentar especificar la ubicación del archivo mkl.h explícitamente utilizando:
Nuevamente, esta línea se puede agregar después del comando target_include_directories.
Si ninguna de estas soluciones funciona, es posible que debas verificar si la variable de entorno MKLROOT está configurada correctamente y si la biblioteca MKL está instalada correctamente.