VS C++ 选择静态编译,仍要加DLL

VS C++ 选择静态编译, 代码生成: /MTd, 运行EXE 报缺少我自己生成DLL文件,
一定要把我自己生成的DLL加到EXE目录,这个EXE才能运行, 静态编译不是已经
全部包含DLL吗?为什么还要添加我的DLL呢?其他系统带的DLL则有包含到EXE里.

静态编译是将vsc的lib编译到exe里面去,第三方的lib不行吧。你看文档说明就是将 LIBCMTD.lib加到文件里面,并没有说第三方的,而且一般也不会打包lib的方式,都是走的dll路子

img

还有一种你可以看下你的lib生成的时候有没有选择/MT或者/MTD的模式,这个生成的lib和生成dll时候一起生成的lib是不一样的。
具体你看这个问题下的回答
vs2010为什么设置了静态编译还是需要dll文件才能运行exe呢? - 1212的回答 - 知乎
https://www.zhihu.com/question/47204019/answer/104805135

以下回答由 ChatGPT 生成:

这个问题可能是由于两个原因导致的:没有正确配置项目属性或者使用了一些依赖于动态链接库的功能。

首先,确保你已经正确配置了项目属性,以便进行静态编译。请按照以下步骤检查和更改项目属性:

  1. 在 Visual Studio 中打开你的项目。
  2. 在“解决方案资源管理器”中,右键点击你的项目,然后选择“属性”。
  3. 在属性选项卡中,找到“常规”选项。
  4. 确保“配置类型”设置为“静态库”或“应用程序”。
  5. 在“C/C++”选项下的“代码生成”中,确保“运行库”设置为“多线程调试 (/MTd)”(或“多线程 (/MT)”,具体取决于你的需求)。
  6. 点击“应用”或“确定”按钮保存更改。

如果你已经正确设置了项目属性,那么可能是因为你的代码中使用了一些依赖于动态链接库的功能,这些功能无法被静态编译包含在你的可执行文件中。在这种情况下,你需要手动将相关的 DLL 文件添加到你的 EXE 目录中。这是因为这些 DLL 文件是在运行时动态加载的,而不是在编译时静态链接的。

如果你确定你的代码不依赖于任何动态链接库,或者你希望将这些依赖项静态链接到你的可执行文件中,那么可能需要检查你的代码和项目设置,以确保正确地使用静态链接库并且没有使用任何依赖于动态链接库的功能。

对于无法确定的问题,请提供更多关于项目、代码和使用的依赖项的详细信息,以便我能够更好地帮助你解决这个问题。


相关推荐阅读


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

我在工程里是用#pragma comment(lib,"xx.lib ") 这应该是动态链接了DLL, 那如改成静态链接这个DLL呢?

明白了, 只要生成lib就可以在另一项目调用,且可以静态生成EXE独立运行