【问题标题】:LNK2038: mismatch detected for 'RuntimeLibrary' with cudaLNK2038:检测到“RuntimeLibrary”与 cuda 不匹配
【发布时间】: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) 未传播主机标志。

标签: c++ cuda cmake


【解决方案1】:

我认为,一个是针对 CRT DLL (/MD) 链接的,另一个是静态链接 (/MT)。

【讨论】:

  • 谢谢,但我只将一个项目编译为动态库(为此设置了 /MD),并且我没有链接任何其他附加库。
  • 请仔细查看您的项目文件。
猜你喜欢
  • 2014-12-06
  • 2019-04-17
  • 2015-05-07
  • 2021-01-29
  • 1970-01-01
  • 2013-01-20
  • 2012-10-29
  • 1970-01-01
  • 2016-06-24
相关资源
最近更新 更多