es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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:

    include_directories(${MKL_INCLUDE_DIRS})
    

    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:

    include_directories(/opt/intel/oneapi/mkl/latest/include)
    

    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.

Comments are closed.