c++ - 我可以完全静态链接 MFC 应用程序吗?
问题描述
我有一个在 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++。我猜是后者,但不确定库的静态与动态链接能力。
解决方案
我的问题是,我可以配置我的版本以便内置这个 .exe 需要的任何东西吗?还是我总是需要在想要运行它的机器上安装 Visual C++?
是的,您可以使用静态链接构建应用程序,它不需要安装 C++ 和 MFC 运行时即可运行。
如果您使用 C++ 运行时和 MFC 的 dll 依赖项构建(因此不是静态链接),您将需要在您分发到的所有机器上安装 VC++ 运行时(不是完整的开发环境)(为了服务这可能是一个更好的选项)。
您需要阅读 options和/MT
,特别是控制 C++ 运行时和 MFC 链接,尽管 IDE 使这更容易控制。另请注意,您已在C++ 运行时和 MFC 的调试版本(等)中链接,您通常不会像那样分发它。如果您需要在开发框中对其进行调试,您仍然可以通过使用符号构建并关闭优化来获得有关应用程序错误的更多详细信息。/MD
/DLL
/MDd
推荐阅读
- jenkins - 多管道詹金斯
- javascript - ChartJS 中的条形颜色未更新
- spring-boot - 升级到Spring-boot 2.3.1.RELEASE和kafka,找不到kafka.utils.TestUtils
- java - 在 JOptionPane 内的 JScrollPane 上方添加文本
- javascript - 无法从“App.js”解析“@react-navigation/stack”
- c# - LINQ to Entities 无法识别 System.String
- css - 第一次连接提供了不受支持的 MIME 类型,但在浏览器刷新后工作正常吗?
- ffmpeg - 如何将带有ffmpeg的流保存到块中,但是在临时名称中并将名称更改为const
- android - UnsatisfiedLinkError: dlopen failed: library "libm.so.6" not found - Android Studio 4.0
- graphql - 有没有办法用动态变量调用 useQuery ?