我的目标是通过编译(双关语不是有意的)LNK2038“检测到'_ITERATOR_DEBUG_LEVEL'的不匹配:值'0'与值'2'不匹配”的原因列表,其他人可能有条不紊地遵循以调试自己的情况,我的情况将得到解决
我的情况:
要求:
- 视窗 10
- 制作
- 微博 2017
- 英特尔 Paralax Studio XE
- CUDA
重现:
- 下载岩浆
运行 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
- 手动设置
从生成的 VS 解决方案中,在Debug 模式下编译 magma和magma_sparse项目(无需编译 600+ 测试项目)
在单独的文件夹中放置示例代码和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")
运行 CMake(配置、生成)
- 打开VS解决方案,并在Debug模式下编译
有问题的结果:
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 上检查的事项:
- 所有依赖项(*.lib 文件)都使用相同的“调试/发布”标志编译
- 仔细检查实际使用的依赖项右键单击您的项目 -> 属性 -> 链接器 -> 输入 -> 附加依赖项
- 转到每个依赖项项目和您的项目,并通过右键单击项目 -> 属性 -> C/C++ -> 代码生成 -> 运行时库来检查构建标志