C ++:静态链接到同一库的不同版本?

时间:2019-11-01 19:06:01

标签: c++ static-libraries static-linking

我在代码中包含了一个第三方库。我维护了到它的静态链接,并且无法支持动态链接(这是解决问题的最简单方法,但对我而言是不可能的)。最近,该库的开发人员发布了一个更新,其中包括一些重大更改(API中的功能参数已更改,添加/删除的功能等)。

我有一些用户依赖库的旧版本的功能,也有需要新功能的用户。我希望避免为了支持库的多个版本而编译我的代码的多个版本。取而代之的是,我想在用户界面中添加一个开关,允许用户选择他们要使用的库的版本。

在编译我的代码时,如果我尝试一个幼稚的解决方案,并且仅包括旧库和新库,就会遇到乘法定义符号错误(因为并非所有版本之间的所有函数签名都不同)。 ..并且许多标头文件名是相同的,因此在很多情况下,没有直接区分两者的方法。

我当时正在考虑为这两个库创建一个中间包装库...包装将被分别编译,并且它们的API位于不同的名称空间中,然后包含在我的代码中。然后,根据我的需要,我将调用一个不同的包装器,该包装器将在内部访问相应的库。...但这有可能吗?我想问一下在设置这些包装程序的所有工作之前,只是再次遇到相同的多个符号定义错误。...

还是有另一种方法?预先感谢。

1 个答案:

答案 0 :(得分:0)

您描述的解决方案几乎是 的解决方案。只要您的中间包装程序仅公开您的自定义界面,而不公开第3方库中的符号,就不会遇到多定义错误。