在我的项目中,依赖于libsomething
来自第 3 方的静态库(从现在开始调用)。最近,libsomething
已在另一个版本中可用。我的任务是为我的软件提供对旧版本和新版本的支持。在任何给定时间在运行时只使用一个版本libsomething
,但是应该在程序运行之间配置哪个版本。
我在 WinXP 上使用 MSVC2005,次要目标是准备切换到 Linux 和 GCC。
由于两个版本libsomething
都使用相同的符号,因此将它们都链接到我的可执行文件是不可能的,因为两个版本的符号将在链接时发生冲突。
虽然我可以创建两个可执行文件(一个链接旧版本,另一个使用新版本),但我无法决定在最终部署环境中调用哪个可执行文件(遗留原因)。
我想出了为每个版本创建一个动态库包装器libsomething
并在运行时根据某些配置文件链接它们的想法。对于 MSCV,这意味着要使用LoadLibrary()
,GetProcAddress()
等,而在 Linux 上我必须使用dlopen()
and dlsym()
。
我知道 using libtool
(ie, libtldl
) 正在包装此平台依赖性以使用共享库。这是一条合适的路径吗?有更好的(或者至少是不同的)方法吗?libtldl
是否存在开源的替代方案?