My goal is by compiling (pun not intended) a list of causes for LNK2038 "mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2'" that others may follow methodically to debug their own situations, my situation will be resolved
My situation:
Requirements:
- Windows 10
- CMake
- MSVS 2017
- Intel Paralax Studio XE
- CUDA
To reproduce:
- Download MAGMA
Run CMake GUI
- Manually set
GPU_TARGET=Pascal
(My Card: GeForce GTX 1070 Compute Capability: 6.1) - Manually set
MKLROOT=D:/Program Files (x86)/IntelSWTools/parallel_studio_xe_2019.0.045/compilers_and_libraries_2019/windows/mkl
(as instructed in the README-Windows) LAPACK_LIBRARIES: use https://software.intel.com/en-us/articles/intel-mkl-link-line-advisor to determine
- My choice
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
- Manually set
From the generated VS solution, compile in Debug mode magma and magma_sparse projects (no need to compile the 600+ test projects)
In a separate folder put the example code and the 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")
Run CMake (Configure, Generate)
- Open VS solution, and compile in Debug mode
Problematic outcome:
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)
----------
Things to check upon LNK2038:
- All dependencies (*.lib files) were compiled with the same "Debug/Release" flags
- Double check the dependencies actually being used by Right-click on your Project -> Properties -> Linker -> Input -> Additional Dependencies
- Go to each dependency project and to your project, and check the build flags by Right-click on Project -> Properties -> C/C++ -> Code Generation -> Runtime Library