【问题标题】:c++: statically link against different versions of the same library?c++:静态链接同一个库的不同版本?
【发布时间】:2019-11-01 19:06:01
【问题描述】:

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

我有一些用户依赖旧版本库的功能,也有一些用户也需要新功能。我想避免为了支持库的多个版本而编译多个版本的代码。相反,我想在我的 UI 中包含一个开关,允许用户选择他们想要使用的库版本。

在编译我的代码时,如果我尝试一个简单的解决方案并简单地包含新旧库,我会得到多重定义符号错误(因为并非所有版本之间的函数签名都不同)等等。 ..并且许多头文件名是相同的,因此在许多情况下,两者之间没有直接的区别。

我正在考虑为这两个库创建一个中间包装器库...包装器将单独编译,它们的 API 位于不同的命名空间中,然后包含在我的代码中。然后我会根据我的需要调用一个不同的包装器,它会在内部访问适当的库......但是这样的事情可能吗?在进行设置这些包装器的所有工作之前,我想在这里问一下,只是再次遇到相同的多符号定义错误....

或者还有其他方法吗?提前致谢。

【问题讨论】:

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


    【解决方案1】:

    您描述的解决方案几乎是解决此问题的方法。只要您的中间包装器只公开您的自定义接口而不是来自 3rd 方库的符号,您就不会遇到多定义错误。

    【讨论】:

    • 底层库可以做很多事情,但是,这会破坏这个方案(如果同时使用两者)。例如,依赖于命名的系统资源。绑定特定的本地 TCP 端口。等等......但是,一般来说,这是要走的路。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 2014-12-11
    • 2010-12-24
    相关资源
    最近更新 更多