Список причин для LNK2038, MSVS2017 MAGMA

Моя цель состоит в том, чтобы скомпилировать (каламбур не предназначен) список причин для LNK2038 «обнаружено несоответствие для« _ITERATOR_DEBUG_LEVEL »: значение« 0 »не соответствует значению« 2 »», которое другие могут методично использовать для отладки своих собственных ситуаций, моя ситуация будет решена

Моя ситуация:

Требования:

  • Windows 10
  • CMake
  • MSVS 2017
  • Intel Paralax Studio XE
  • CUDA

Воспроизвести:

  1. Скачать МАГМА
  2. Запустить CMake GUI

    • Ручная настройка GPU_TARGET=Pascal (Моя карта: возможность вычислений GeForce GTX 1070: 6.1)
    • Ручная настройка MKLROOT=D:/Program Files (x86)/IntelSWTools/parallel_studio_xe_2019.0.045/compilers_and_libraries_2019/windows/mkl (как указано в README-Windows)
    • LAPACK_LIBRARIES: использовать https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor определить

      • Мой выбор
      • D:/Program Files (x86)/IntelSWTools/parallel_studio_xe_2019.0.045/compilers_and_libraries_2019/windows/mkl/lib/intel64_win/mkl_intel_lp64.lib;D:/Program Files (x86)/IntelSWTools/parallel_studio_xe_2019.0.045/compilers_and_libraries_2019/windows/mkl/lib/intel64_win/mkl_intel_thread.lib;D:/Program Files (x86)/IntelSWTools/parallel_studio_xe_2019.0.045/compilers_and_libraries_2019/windows/mkl/lib/intel64_win/mkl_core.lib;D:/Program Files (x86)/IntelSWTools/compilers_and_libraries_2019.0.117/windows/compiler/lib/intel64_win/libiomp5md.lib
  3. Из сгенерированного решения VS скомпилируйте в Режим отладки магма а также magma_sparse проекты (не нужно компилировать более 600 тестовых проектов)

  4. В отдельной папке положить пример кода и CMakeLists.txt

    add_executable(magma-test example_sparse.cpp)
    
    find_package( CUDA ) # just to set CUDA_INCLUDE_DIRS
    
    target_include_directories(magma-test PUBLIC D:/Work/Magma/magma-2.4.0/include D:/Work/Magma/magma-2.4.0/sparse/include ${CUDA_INCLUDE_DIRS})
    target_link_libraries(magma-test debug D:/Work/Magma/magma-2.4.0/build/lib/Debug/magma.lib debug D:/Work/Magma/magma-2.4.0/build/lib/Debug/magma_sparse.lib)
    
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
    
  5. Запустить CMake (настроить, сгенерировать)

  6. Откройте решение VS и скомпилируйте в Режим отладки

Проблемный результат:

1>magma_sparse.lib(magma_sparse_generated_djacobisetup.cu.obj) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in magma.lib(interface.obj)

1>magma_sparse.lib(magma_sparse_generated_djacobisetup.cu.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MTd_StaticDebug' in magma.lib(interface.obj)

———-

Что нужно проверить на LNK2038:

  1. Все зависимости (файлы * .lib) были скомпилированы с одинаковыми флагами «Отладка / Выпуск».
    • Дважды проверьте зависимости, которые фактически используются, щелкнув правой кнопкой мыши на вашем проекте -> Свойства -> Компоновщик -> Ввод -> Дополнительные зависимости
    • Перейдите к каждому проекту зависимостей и к вашему проекту и проверьте флаги сборки, щелкнув правой кнопкой мыши Project -> Properties -> C / C ++ -> Generation Code -> Runtime Library

0

Решение

CMakeLists.txt, который «разрешает» вышеуказанную ошибку, компилирует и запускает:

add_executable(magma-test example_sparse.cpp)

find_package( CUDA )
set( MKLROOT "D:/Program Files (x86)/IntelSWTools/parallel_studio_xe_2019.0.045/compilers_and_libraries_2019/windows/mkl" )
set( LAPACK_LIBRARIES
"D:/Program Files (x86)/IntelSWTools/parallel_studio_xe_2019.0.045/compilers_and_libraries_2019/windows/mkl/lib/intel64_win/mkl_intel_lp64.lib""D:/Program Files (x86)/IntelSWTools/parallel_studio_xe_2019.0.045/compilers_and_libraries_2019/windows/mkl/lib/intel64_win/mkl_intel_thread.lib""D:/Program Files (x86)/IntelSWTools/parallel_studio_xe_2019.0.045/compilers_and_libraries_2019/windows/mkl/lib/intel64_win/mkl_core.lib""D:/Program Files (x86)/IntelSWTools/compilers_and_libraries_2019.0.117/windows/compiler/lib/intel64_win/libiomp5md.lib")

target_include_directories(magma-test PUBLIC
"D:/Work/Magma/magma-2.4.0/include""D:/Work/Magma/magma-2.4.0/sparse/include"${CUDA_INCLUDE_DIRS}
${MKLROOT}/include)
target_link_libraries(magma-test
${CUDA_CUDART_LIBRARY}
${CUDA_CUBLAS_LIBRARIES}
${CUDA_cusparse_LIBRARY}
${LAPACK_LIBRARIES}
debug D:/Work/Magma/magma-2.4.0/build/lib/Debug/magma.lib
debug D:/Work/Magma/magma-2.4.0/build/lib/Debug/magma_sparse.lib
optimized D:/Work/Magma/magma-2.4.0/build/lib/Release/magma.lib
optimized D:/Work/Magma/magma-2.4.0/build/lib/Release/magma_sparse.lib)

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")

Библиотеки CUDA и MKL, которые MAGMA использует при компиляции, по-видимому, также должны быть предоставлены для кода, использующего библиотеки MAGMA.

РЕДАКТИРОВАТЬ: Подожди, нет. Он компилируется и запускается в Release, но не в Debug ..

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]