我正在尝试将最初为Intel编写的源代码改编为最新的OneAPI,并在MacOS下编译它。
我对CMakeLists进行了修改,以找到这样的OneAPI库:
option (USE_ONEAPI "Enable MKL solver support via OneAPI Base Toolkit" ON)
...
if (USE_ONEAPI)
message(STATUS "Seeking OneAPI libraries...")
list(APPEND MKL_LIBS "mkl_core" "mkl_gf_lp64" "mkl_gnu_thread" "pthread")
foreach (f ${MKL_LIBS})
if (INTEL_ONEAPI_DIR)
# user provided OneAPI directory
set(oneapiMklDir "${INTEL_ONEAPI_DIR}/mkl/latest")
message(STATUS " Seeking for ${f} in custom path: ${oneapiMklDir}...")
find_library (${f}_LIB ${f} PATH "${INTEL_ONEAPI_DIR}/mkl/lib/intel64/" DOC "MKLPARDISO (library)")
include_directories ("${INTEL_ONEAPI_DIR}/mkl/include")
else ()
set(oneapiDir "/opt/intel/oneapi")
set(oneapiMklDir "${oneapiDir}/mkl/latest")
message(STATUS " Seeking for ${f} in default path: ${oneapiMklDir}...")
find_library (${f}_LIB ${f} HINTS "${oneapiMklDir}/lib" DOC "MKLPARDISO (library)")
include_directories ("${oneapiMklDir}/include")
endif ()
if (${${f}_LIB} STREQUAL "${f}_LIB-NOTFOUND")
message (FATAL_ERROR "OneAPI ${f} library not found")
else()
message (STATUS "OK: ${f} library successfully found")
endif ()
list (APPEND EXT_LIBS ${${f}_LIB})
endforeach ()
list (APPEND MODULE_LIST "MKLPARDISO")
endif ()这就是结果:
-- Seeking OneAPI libraries...
-- Seeking for mkl_core in default path: /opt/intel/oneapi/mkl/latest...
-- OK: mkl_core_LIB library successfully found
-- Seeking for mkl_gf_lp64 in default path: /opt/intel/oneapi/mkl/latest...
CMake Error at CMakeLists.txt:379 (message):
OneAPI mkl_gf_lp64 library not found我不知道为什么CMake没有找到这些库。它们是否安装了OneAPI base和HPC工具包?
发布于 2022-06-01 21:20:06
这很可能是老生常谈,你已经找到了解决办法,但既然我正在讨论一个问题,我想我会回答下一个人。
不包括mkl_gf_lp64,但mkl_intel_lp64包含。这两者并不相等,所以您可能需要mkl_intel_thread。
您还可以使用oneAPI链接顾问来准确地确定您需要什么。
https://www.intel.com/content/www/us/en/developer/tools/oneapi/onemkl-link-line-advisor.html
https://stackoverflow.com/questions/71839592
复制相似问题