【问题标题】:Can I fully statically link a MFC application?我可以完全静态链接 MFC 应用程序吗?
【发布时间】:2021-11-21 13:11:36
【问题描述】:

我在 Visual Studio 中构建了一个简单的 MFC 应用程序。我希望能够链接它,以便任何 Windows PC 都可以运行它而无需安装任何其他东西。只需双击 .exe 即可!

查看调试版本,这是我的依赖项:

VERSION.dll
MSVCP140D.dll
Mfc140d.dll
KERNEL32.dll
USER32.dll
GDI32.dll
SHELL32.dll
OLEAUT32.dll
VCRUNTIME140D.dll
Ucrtgbased.dll
WS2_32.dll

我知道其中两个 .dll 来自 Windows Visual C++ 库。

我的问题是,我可以配置我的版本以便内置这个 .exe 需要的任何东西吗?或者我是否总是需要在想要运行它的机器上安装 Visual C++。我猜是后者,但不确定库的静态与动态链接能力。

【问题讨论】:

  • 你试过在静态库中链接吗?
  • 很多这些 DLL 是 Windows 系统文件。
  • @ThomasMatthews 还没有。是的,我希望这不会有问题。我的问题是,我是否需要在每台想要运行的机器上使用 Visual C++ 运行时
  • 请显示您的项目设置。
  • @sec Incorrect.

标签: c++ windows visual-studio linker mfc


【解决方案1】:

我的问题是,我可以配置我的版本以便内置这个 .exe 需要的任何东西吗?还是我总是需要在要运行它的机器上安装 Visual C++?

是的,您可以使用静态链接构建应用程序,它不需要安装 C++ 和 MFC 运行时即可运行。

如果您使用 C++ 运行时和 MFC 的 dll 依赖项进行构建(因此不是静态链接),您将需要在您分发到的所有机器上安装 VC++ 运行时(不是完整的开发环境)(用于维护这是可能是更好的选择)。

您需要阅读选项 /MT、/MD 和 /DLL,专门用于控制 C++ 运行时和 MFC 链接,尽管 IDE 使这更容易控制。另请注意,您已在 C++ 运行时和 MFC 的调试版本 (/MDd et. al) 中链接,通常不会这样分发它。如果您需要在开发框中对其进行调试,您仍然可以通过使用符号构建并关闭优化来获取有关应用程序错误的更多详细信息。

【讨论】:

  • 感谢您的回复!所以要明确一点,如果应用程序是 MFC,即使使用静态链接,您仍然需要目标机器上的运行时?
  • @billybob2 否。如果您构建静态,则不需要运行时。如果您不构建静态,则需要运行时。静态构建将其全部嵌入到 exe 中,使其更大。
  • @billybob2,不,静态链接意味着您正在将所有必需的库代码构建到目标应用程序中。
猜你喜欢
  • 1970-01-01
  • 2017-11-26
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多