У меня есть несколько версий одной и той же библиотеки, написанной на C ++. Мне нужно сравнить их бок о бок. Эти библиотеки используют одинаковое пространство имен, имена функций и принимают одинаковые параметры.
Существуют ли какие-либо методы для контроля, какую версию библиотеки я использую, когда связываю две или более из них одновременно?
Вы не можете связать две библиотеки с одинаковыми символами и получить доступ к обеим. Однако вы можете создать свои собственные библиотеки тонких оболочек для устранения неоднозначности двух версионных библиотек:
Wrapper
реализует функции целевой библиотеки с использованием абстрактных виртуальных функцийWrapper
в классе под названием WrapperImpl
который обращается к целевой библиотеке из виртуальных методовWrapper *MakeImpl
возврате new WrapperImpl()
WrapperImpl
в статические библиотеки несколько раз, каждый раз связываясь с разными версиями целевой библиотеки. Критический: проходить -DWrapperImpl=WrapperImplV1 -DMakeImpl=MakeImplV1
компилятору, с V1
, V2
, V3
и так далее, для разных версий. Вы должны в конечном итоге с несколькими библиотеками.На этом этапе ваш главный тестер имеет доступ к автономным функциям. MakeImplV1
, MakeImplV2
, MakeImplV3
и так далее, созданный путем переименования MakeImpl
через препроцессор. Используйте эти функции для получения экземпляров Wrapper
которые обращаются к различным версиям целевой библиотеки.
Других решений пока нет …