【问题标题】:dll in c++, WINDOWS deployment / dependency's (mingw-w64 )c++ 中的 dll,WINDOWS 部署/依赖项 (mingw-w64)
【发布时间】:2017-07-08 13:26:52
【问题描述】:

背景: 我正在为 x64 应用程序编写一个插件(基本上是一个 dll)。 更具体地说,这个 x64 WIN 应用程序带有一个“插件管理器”(一个 dll),用于加载和卸载 3rd 方插件(如我的)。 我的插件是用 C++ 编写的,我决定用 mingw-w64 编译它。作为 IDE,我选择了 Code::Blocks。 我试图避免使用 MS 工具,因为后来我需要在 Linux 和 MAC 上部署“相同”的插件(但这是另一个故事,现在让我们关注 Windows)。

挑战: 尽管我在研究和测试的日子里真的很努力,但我无法以我的知识/技能水平可靠地解决一个严重的问题:对 WINDOWS dll 的依赖。 我必须确保这个插件可以在从 7 到 10 的所有 WINDOWS 版本上运行(但仅限 x64)。 应避免运送 MS 可再发行产品,因为在这种情况下不实用。 显然,c-runtime 库“MSVCRT.dll”的静态链接似乎既不受版权保护,也不是可靠的解决方案,因为在各种 WIN 版本上存在许多不同的版本。尽管 Microsoft 将其描述为“已知 dll”,但我不确定哪个版本在哪里可用,以及哪个版本能够在某个 Win 版本上运行。如果某个 MSVCRT.dll 运行,它是否为我的插件提供了足够的“功能”? (对我来说太高了)

问题: 在您的专业意见中,就 Windows dll 依赖项而言,确保我的插件在 WINDOWS 7 到 10 (x64) 上的稳定性的可靠方法是什么? 在这种依赖于部署的情况下,我还应该担心其他陷阱吗?

其他信息: 在插件的这个开发阶段,依赖 walker_x64(多么方便的工具!)向我展示了依赖:

  • KERNEL32.DLL
  • MSVCRT.DLL(这是我最担心的那个人)
  • PM_64.DLL(即 x64 应用的插件管理器)

在我的计算机 (Windows 7 x64) 上,MSVCRT.DLL 显示版本 7.0.7601.17744,好的,可以工作。但是,如果客户拥有一台全新安装的 Windows 10 机器(可用的 MS 可再发行版本不多),它能否可靠地工作?

我知道之前已经讨论过类似的问题,尤其是在 c-runtime 库“MSVCRT.dll”上。然而,他们中的许多人在WIN10之前。 例如 6 年前的 newlib 想法 (http://sourceware.org/newlib/)。 Mingw-w64 附带名为:libmsvcrt.a / libmsvcrtXXX.a 的档案。有什么办法吗?

我已经阅读了我能找到的所有内容,但我不得不承认,现在我的疑问和问题比答案更多...... 感谢您的专业建议。谢谢。

【问题讨论】:

    标签: c++ windows dll deployment mingw


    【解决方案1】:

    您至少可以依赖以下动态库的存在和稳定性:kernel32.dllmsvcrt.dlluser32.dll , gdi32.dll。它们是系统库,在安装干净的 OS 后出现在 C:\Windows\System32\ 文件夹中,由 Microsoft 作为用户 API 创建以与 OS 交互。 MinGW 库 libmsvcrt.a(以及非静态 MS 库)没有实际的处理代码,只是从系统文件夹调用这些 DLL 的包装器。

    【讨论】:

    • 这些 dll 具有我可以依赖的相同范围的功能,从 Windows 7 到 10,对吧?或者当我在具有特定 dll 版本的 Windows 7 上编译并且客户拥有 Windows 10 时会出现问题吗?谢谢!
    • 我问是因为我在一年前就遇到过这个问题。尽管最后那个插件有更多的依赖。一些客户需要安装许多 MS 可再发行组件才能使其正常工作。这次我想把它做好。同时谢谢你,Serge,感谢!
    • @fcad3d,抱歉耽搁了,我上周远离互联网。随着新版本 Windows 的发布,MS 为这些 DLL 添加了新功能,但试图保留现有功能的功能。他们还发布错误修正。有时(很少)MS 真的不赞成使用某些功能,并在 MSDN 中记录了这一点。对于您的情况,我无法猜测问题的根源是什么(这需要调查发生了什么),但假设问题不在 msvcrt.dll 中。
    猜你喜欢
    • 2012-01-09
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多