【发布时间】: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