cll中的dll,WINDOWS部署/依赖(mingw-w64)

时间:2017-07-08 13:26:53

标签: c++ windows dll deployment mingw

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

挑战: 有一个严重的问题,我无法用我的知识/技能水平解决,尽管我在研究和测试的日子里真的很努力:对WINDOWS dll的依赖。 我必须确保此插件在所有WINDOWS版本上运行,从7到10(但仅限x64)。 在这种情况下,应避免使用MS再发行的货物。 显然,c-runtime库“MSVCRT.dll”的静态链接似乎既不是版权也不是可靠的解决方案,因为在各种WIN版本上有许多不同的版本。虽然微软将其描述为“已知的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。那有没有办法呢?

我已经阅读了所有我能找到的内容,但我必须承认,现在我有更多的疑问和问题,而不是答案...... 您的专业建议表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:0)

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