【发布时间】:2019-11-01 19:06:01
【问题描述】:
我在我的代码中包含了一个 3rd 方库。我维护到它的静态链接并且无法支持动态链接(这将是解决问题的最简单的方法,但在我的情况下是不可能的)。最近,该库的开发人员发布了一个更新,其中包括一些重大更改(API 中的函数参数更改、添加/删除的功能等)。
我有一些用户依赖旧版本库的功能,也有一些用户也需要新功能。我想避免为了支持库的多个版本而编译多个版本的代码。相反,我想在我的 UI 中包含一个开关,允许用户选择他们想要使用的库版本。
在编译我的代码时,如果我尝试一个简单的解决方案并简单地包含新旧库,我会得到多重定义符号错误(因为并非所有版本之间的函数签名都不同)等等。 ..并且许多头文件名是相同的,因此在许多情况下,两者之间没有直接的区别。
我正在考虑为这两个库创建一个中间包装器库...包装器将单独编译,它们的 API 位于不同的命名空间中,然后包含在我的代码中。然后我会根据我的需要调用一个不同的包装器,它会在内部访问适当的库......但是这样的事情可能吗?在进行设置这些包装器的所有工作之前,我想在这里问一下,只是再次遇到相同的多符号定义错误....
或者还有其他方法吗?提前致谢。
【问题讨论】:
标签: c++ static-libraries static-linking