c++ - 尽管使用 XP 工具集,但应用程序无法在 Windows XP 上运行。需要解决问题的想法
问题描述
我正在开发一个 dll 库。我的解决方案(cmake 核心,Visual Studio sln 生成)由几个静态 .lib 项目组成,这些项目用于构建这个 dll 和 dll 项目本身。还有一些第 3 方依赖项(boost、nana 等)。我正在使用地狱依赖项管理器 ( https://rilis.io/projects/hell ) 下载我的依赖项。我知道它没有被广泛使用,但简而言之,它只是一个简单的工具,在读取配置文件后使用 git 下载依赖项,使用 cmake 生成项目并使用请求的生成器进行编译。
我需要我的 dll 来支持 Windows XP。我在 Windows 10 机器上开发,并将 dll 复制到 Windows XP SP3 机器,这是我运行测试的地方。但是我的 dll 无法在 windows xp 上加载。LoadLibrary 返回 nullptr。名称和架构是匹配的。我没有收到任何系统错误,只是返回的指针是 nullptr。我曾经遇到过系统错误,但我通过切换到 Windows XP API 中存在的函数来消除它们。我启用了 Snapping 并在 DependencyWalker 中运行分析。我得到了关于
api-ms-win-core-synch-*
api-ms-win-core-fibers-*
api-ms-win-core-localization-*
无法加载(可能也是通过 dll 初始化期间的动态加载。我发现了它的 Windows XP 兼容性问题。我发现我需要使用 v140_xp 工具集构建我的模块。Cmake 提供了指定工具集的选项,而地狱应该传播此设置使用提供的工具集构建其他依赖项。据我所知,地狱、cmake 和 Visual Studio 应该是这种情况。但是我的 dll 仍然无法加载,并且 DependencyWalker + 捕捉仍然显示相同的失败加载尝试。
我想知道我是否在我的方法中遗漏了一些东西,或者工具集设置是否没有传播到所有静态库。第二个可能会导致使用非 xp 工具集编译一个或多个依赖项,从而导致与非 xp 运行时链接(我正在与 crt - MTd/MT 静态链接)和依赖项失败。
我需要一些想法来帮助我解决这个问题。任何人都知道我如何检查我的 dll 包含的 obj 或 lib 可以添加对非 xp API 的依赖关系吗?或者也许有人知道我在构建模块时可能会错过什么?
感谢您的时间!
解决方案
推荐阅读
- google-apps-script - 获取统计共享邮件 Google 脚本
- java - 如何让我的按钮 actionListener 计算某人点击的次数?
- asp.net-mvc-5 - 无法在 iis 8 中同时使用 maxAllowedContentLength 和 maxQueryString
- javascript - 触发 Firebase 函数 onUpdate 文档字段值
- javascript - 是否可以在 cytoscape.js 中拥有单一稳定的 dagre 布局
- loops - 谷歌地球引擎 - 计算一个时间段内最长干旱期的天数
- java - 将 Servlet 错误消息重定向到 JSP 后保存表单数据
- java - 如何从 ByteArrayInputStream 创建 MappedByteBuffer?
- c# - 异步任务的单元测试
- rabbitmq - 使用rabbitfixture在CentOS 7上启动rabbitmq(3.7.3)服务器时初始化终止