gpt4 book ai didi

c++ - 在动态库中包装不同版本的静态库

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:58:09 24 4
gpt4 key购买 nike

在我的项目中,存在对来自第 3 方的静态库(从现在起称为 libsomething)的依赖。最近,libsomething 在另一个版本中可用。我的任务是为我的软件提供对旧版本和新版本的支持。在任何给定时间在运行时只使用一个版本的 libsomething,但是应该在程序运行之间配置它是哪个版本。

我在 WinXP 上使用 MSVC2005,第二个目标是准备切换到 Linux 和 GCC。

因为 libsomething 的两个版本都使用相同的符号,将它们链接到我的可执行文件是不可能的,因为两个版本的符号在链接时会发生冲突。

虽然我可以创建两个可执行文件(一个链接旧版本,另一个使用新版本),但我无法决定在最终部署环境中调用哪个可执行文件(遗留原因)。

我想出了为每个版本的 libsomething 创建一个动态库包装器并根据一些配置文件在运行时链接它们的想法。对于 MSCV,这将意味着继续使用 LoadLibrary()GetProcAddress() 等,而在 Linux 上我将不得不使用 dlopen( )dlsym()

我了解使用 libtool(即 libtldl)正在包装此平台依赖性以使用共享库。这是一条合适的道路吗?是否有更好(或至少不同)的方法? libtldl 的替代方案是否作为开源存在?

最佳答案

我知道您说过您不能使用两个可执行文件,因为要决定执行哪个,但是您不能根据配置时选择的版本在可执行文件之间来回 exec 吗?

关于c++ - 在动态库中包装不同版本的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2801666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com