【问题标题】:C++: How to ship a single executable without mingwm10.dllC++:如何在没有 mingwm10.dll 的情况下发布单个可执行文件
【发布时间】:2011-04-18 02:52:16
【问题描述】:

我正在使用 C++/wxWidgets 创建一个小型跨平台程序。通过使用静态链接,我最终只获得了一个适用于 Windows 的 .exe 文件。但是它仍然需要一个小的 (18 KB) mingwm10.dll

虽然我可以使用这个 dll 分发我的应用程序,但我更愿意将它放在 .exe 的“内部”......这可能吗?

谢谢

【问题讨论】:

标签: c++ wxwidgets static-libraries


【解决方案1】:

如果你使用configure脚本编译wxWidgets,添加--disable-threads。这会将wxUSE_THREADS 设置为0,wxThread 类和所有依赖于线程的代码都不会被编译。自动不会链接mingwm10.dll。

【讨论】:

  • MinGW 有这个用于处理线程的小库,因为它需要 DllMain() 来获得有关线程终止的通知。你不能轻易摆脱它。
【解决方案2】:

“包含所有项目文件的单个 EXE”称为安装脚本。考虑类似 InnoSetup 或 MSI。

在首次使用代码时滚动您自己的安装 DLL 理论上是可行的,但非常难看。它是这样的:您将 DLL(如果可能的话,压缩)作为资源添加到 EXE。启动时,您尝试加载 DLL;如果你不能,你从资源中取出它并放在某个地方。这将在非管理员用户下中断。并且自动权限提升将不起作用(它适用于设置文件)。并且您必须非常小心,在安装之前不要调用 DLL 中的任何内容。就像我说的,非常非常丑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    相关资源
    最近更新 更多