避免DLL版本控制问题
Avoiding DLL versioning problems
我在C++中有多个可执行程序,这些程序使用许多也是用C++编写的库(我有所有这些库的来源)。
我面临的问题是:当一个可执行EXE包含一个dll dll时,它们可能都依赖于额外的dll DLL1和DLL2:
EXE ----- DLL
| |
DLL1 DLL2
如果DLL1和DLL2是同一个库,并且DLL2是DLL1的最新版本,则链接和编译内容时会遇到问题。
我该如何解决这个问题?有时,由于向后兼容性问题,我不能只转储DLL1并保持最新。
Microsoft为Windows XP解决了这个问题,但几乎向"本地"开发人员隐瞒了如何做到这一点的信息。
构建C/C++独立应用程序和并行程序集的MSDN页面有点吓人,这就是它的起点。
基本上你要做的是:
-
将Dll1和Dll2转换为程序集。程序集是一个dll文件+拥有它的清单。可以称它们为dll.manifest和dll2.manifest。
-
将manifestdependency*指令添加到EXE和DLL中,它们按名称列出上面的每个程序集。
-
为每个程序集创建子文件夹"dll1"answers"dll2",并将以相同名称命名的dll存储在其中。
注意:"dll"answers"exe"本身不需要是程序集,尽管文档可能会推断/鼓励这样做。
关于步骤2-没有必要手动添加或合并exe或dll的清单文件,因为现代版本的Visual Studio会自动将生成的清单包含在应用程序中。有一个完整的项目设置选项卡专门用于此。
为了钩住这一点,DevStudio#pragma用于注册要包含在生成的清单中的程序集。这是一个应用程序(或dll)如何声明其有兴趣使用comctl32.dll版本的示例-出于您的目的,您可以更改名称以反映您的"dll"程序集名称,并且您的应用程序附带的程序集不需要版本或publicKeyToken参数。
#pragma comment(linker,""/manifestdependency:type='win32'
name='Microsoft.Windows.Common-Controls' version='6.0.0.0'
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'"")
- C++11 谷物序列化 - 版本控制
- Msgpack中是否具有版本控制功能
- python 和 swig 版本兼容性问题
- 从模板化类版本控制序列化派生类
- 哪些 Netbeans 8.2 项目文件应提交到C++项目的版本控制?
- 使用不同版本的 gcc 和 g++ 进行编译时出现问题
- Xcode(版本9.2(9C40B)):试图包括Boost时C 语义和链接器问题
- 2WD蓝牙控制的汽车的问题无法停止
- 将词法分析器字符串累加器移植到新版本的 Quex 时出现问题
- 将GCC版本升级到发行版附带的版本以外的版本是否有任何问题
- 如何创建受版本控制的 DLL
- 如何在性能和VMS上对C++进行代码审查/调试/编码/测试/版本控制
- GCC 函数多版本控制和命名空间
- 如何在编译C++代码时解决一些版本控制问题
- C++STL版本控制问题+Boost
- 避免DLL版本控制问题
- VC++VS2013项目从非版本控制文件夹移动到版本控制文件夹后未进行编译
- 这些辅助文件是否应在 Git 版本控制下
- C++命名空间版本控制
- 向静态库中添加一个全局变量以进行版本控制