【问题标题】:Link to a specific .dll file in Visual Studio?链接到 Visual Studio 中的特定 .dll 文件?
【发布时间】:2016-09-15 18:29:38
【问题描述】:

我在 Visual Studio 2015 for Windows 7 中使用 OpenGl 编写了一个 C++ 程序。我使用“发布”而不是“调试”编译了我的代码。该程序在我的计算机上运行良好,但是当我移至另一台计算机时,程序失败。我收到错误消息:

程序无法启动,因为您的计算机中缺少 MSVCP140D.dll。尝试重新安装程序以解决此问题。

我想让我的程序在其他计算机上运行,​​这样我就不必安装最新的驱动程序或库来运行它。我的第一台计算机上有 MSVCP140D.dll,但我的另一台计算机上只有 MSVCP120.dll。如何编译我的代码,使其不需要 MSVCP140D.dll,而是使用 MSVCP120.dll?

【问题讨论】:

  • *D.dll 是调试 DLL,您的发布设置设置不正确。
  • 为什么要它与 MSVCP120.DLL 一起工作?无论您运行什么版本的 Visual Studio,您都需要提供适当的 DLL。您不能期望这些 DLL 的任何版本都可用,无论是来自 MSVC 2015 的 *140.DLL 还是来自 MSVC 2013 的 *120.DLL。或者如 shrike 所说的静态链接。

标签: c++ visual-studio dll compilation


【解决方案1】:

首先确保您的构建设置对于发布构建是正确的:MSVCP140D.dll 是 Visual Studio 2015 运行时的调试 DLL;这个库的发布版本是MSVCP140.dll

修复此问题后,您可以在要运行程序的目标计算机上安装Visual C++ Redistributable for Visual Studio 2015:这将安装缺少的库。请注意,VC++ 可再发行组件不安装调试库 (MSVCP140D.dll),而是安装发布库 (MSVCP140.dll)。

另一种选择是通过静态链接到 Visual C++ 运行时重新构建您的程序。打开 Project Properties 对话框,在“Configuration Properties -> C/C++ -> Code Generation”的“Runtime Library”字段中,选择“Multi-threaded (/MT)”。这样,就无需在目标计算机上安装 VC++ Redistributable。

【讨论】:

  • 对于其他人 - 我还必须确保将我的库从 VC 2015 切换到 VC 2013。在我这样做之前,这些步骤并没有解决我的问题。
【解决方案2】:

您需要安装 Visual Studio 2013 才能与 MSVCP120.dll 链接(您可以继续使用 MSVC 2015,但选择 2013 作为工具链)。安装 MSVC 2013 后,您将能够在项目设置 -> 平台工具集中选择它。

或静态链接您的应用程序(在代码生成设置中将/MD 更改为/MT)。那么您的应用将不需要任何 MSVC DLL 即可运行(但它会变得更大)。

或者在您的另一台计算机上安装VC 2015 Redistributable package

【讨论】:

  • 在哪里选择 2013?你说是工具链,那在哪里?
  • 安装 MSVC 2013 后,您将能够在项目设置 -> 平台工具集中选择它。
  • 另外,如果我更改为 /MT,编译时会出现大量错误。我没有使用 /MD 得到错误
  • 我安装了 2013 并且(在 VC 2015 中)我将工具链更改为使用 VC 2013。我无法编译,出现 3 个错误和 1 个警告。我不知道该怎么处理它们:错误:LNK1120 2 unresolved externals;错误:LNK2001 无法解析的外部符号 __imp____stdio_common_vsprintf;警告:LNK4098 defaultlib 'LIBCMT' 与其他库的使用冲突;使用 /NODEFAULTLIB:library;错误:LNK2001 无法解析的外部符号 __imp____stdio_common_vsscanf
猜你喜欢
  • 2016-09-30
  • 2011-12-12
  • 2011-06-06
  • 1970-01-01
  • 2011-09-28
  • 2016-10-18
  • 2021-01-20
  • 1970-01-01
  • 2011-05-09
相关资源
最近更新 更多