2

我知道这不是一件很干净的事情,但是我该怎么做呢?

基本上,我正在静态链接使用 xerces-c 2.7 的第三方库,并且我想使用 xerces-c 3.1(对于 2.x 中没有的一些最新和最强大的功能)

使用 2.7 的模块(由第三方库在内部使用并且从未暴露给我的代码)与使用 3.1 的模块(在我的代码中)没有任何共同之处。

有什么办法可以做到这一点?我知道这不是一件好事,但想到从提交图书馆升级请求到实际完成它之间的准备时间,我不寒而栗。可能至少几个月,我不想走那条邪恶的道路。

一个通用的编译器独立解决方案会好得多。

4

1 回答 1

0

除了“链接具有不兼容依赖项的库”中提到的解决方案之外,另一个解决方案是通过将不同版本构建到不同的动态库中来隔离它们。最简单的方法可能是将使用 xerces 3.1 的代码移动到一个新的动态库中,并为其创建一个接口。由于您是针对 Xerces 进行静态链接,因此这会将引用保留在动态库的内部。您可能需要更改gcc 可见性设置以确保仅从动态库中导出选定的函数名称。

于 2012-05-30T15:52:42.947 回答