使用静态链接VS2015进行编译

时间:2017-01-23 09:06:29

标签: c++ dll

我正在尝试编译我的程序,因此它创建了一个独立的exe。 其实我有两个问题:

我确实去了属性 - > C / C ++ - >代码生成 - >运行时库并更改为多线程(/ MT)。

在我这样做之后,.exe的大小增加了,但是当我尝试在另一台计算机上使用它时,错误“无法运行此程序,您需要一个名为:msvcp140d.dll的DLL”

这是2个问题,我不明白为什么它要求我使用DLL的调试版本,因为我正在编译发布版本,我不明白为什么它要求我使用DLL,因为我认为他们是静态链接的:/

P.S:我正在尝试编译一个OpenCV3.0项目。我不知道它是否有帮助:/

编辑:一个问题已经解决:我在发布链接器中使用opencv_imgproc310d.dll,使我的程序使用MSVCP140d.dll。 现在我仍然遇到exe不是独立的问题。它需要dll才能工作。 (我只是提升了我的VS所以我有最新版本)。 感谢

1 个答案:

答案 0 :(得分:1)

你是正确的,如果你使用/ MTd标志,你不需要外部依赖(如Microsoft DLL文件)。但是因为可执行文件的标志大小增加(因为它包含更多的二进制代码)。

您的问题“无法运行此程序,您需要一个名为:msvcp140d.dll的DLL”是因为您没有为这两个配置设置运行时库:

  • 调试:您需要设置多线程调试(/ MTd)标志
  • 发布:您需要设置多线程(/ MT)标记

请务必同时设置两者,否则只会运行一个配置。