【发布时间】:2016-12-30 09:21:53
【问题描述】:
我正在使用 Visual Studio 2013 编译包含 cpp 和 cu 文件的动态库,在链接过程中出现此类错误:
proj_generated_cufile.cu.obj : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file.obj
libcpmt.lib(ios.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in file.obj
我没有使用任何额外的库,并且我已经尝试在项目首选项 -> C/C++ -> 代码生成中设置运行时库为“多线程 DLL (/MD)”并在 CUDA C/ 下C++ -> Host to "Multi-Threaded DLL (/MD)" or to "inherit from host"。
我正在使用 cmake(使用 cuda_add_library)生成项目。
问题是我正在尝试编译动态库吗?与这个假设相矛盾的是,当我只编译 cpp 文件时,编译成功。
感谢您的任何建议!
【问题讨论】:
-
谢谢,但我没有链接任何其他库。
-
但是你是 VS C++ 运行时库,这就是发生构建设置不匹配的地方
-
哦,我找到了问题所在,cmake 文件中的 CUDA_PROPAGATE_HOST_FLAGS 设置为 OFF....谢谢各位,抱歉。
-
就我而言,我不得不在 cmake 中使用 MDd/MD 标志而不是 MT/MTd 标志,再次编译并生成 CUDA_PROPAGATE_HOST_FLAGS = 1。更改为多线程 DLL (/MD) 或Visual Studio 中的多线程调试 DLL (/MDd) 未传播主机标志。