Как вы вызываете функцию с одним и тем же символом в 2 разных общих библиотеках?

У меня есть несколько версий одной и той же библиотеки, написанной на C ++. Мне нужно сравнить их бок о бок. Эти библиотеки используют одинаковое пространство имен, имена функций и принимают одинаковые параметры.

Существуют ли какие-либо методы для контроля, какую версию библиотеки я использую, когда связываю две или более из них одновременно?

4

Решение

Вы не можете связать две библиотеки с одинаковыми символами и получить доступ к обеим. Однако вы можете создать свои собственные библиотеки тонких оболочек для устранения неоднозначности двух версионных библиотек:

  • Определите абстрактный класс Wrapper реализует функции целевой библиотеки с использованием абстрактных виртуальных функций
  • Определить реализацию Wrapper в классе под названием WrapperImpl который обращается к целевой библиотеке из виртуальных методов
  • Определить автономный метод Wrapper *MakeImpl возврате new WrapperImpl()
  • компилировать WrapperImpl в статические библиотеки несколько раз, каждый раз связываясь с разными версиями целевой библиотеки. Критический: проходить -DWrapperImpl=WrapperImplV1 -DMakeImpl=MakeImplV1 компилятору, с V1, V2, V3и так далее, для разных версий. Вы должны в конечном итоге с несколькими библиотеками.
  • Свяжите своего главного тестера с этими несколькими библиотеками

На этом этапе ваш главный тестер имеет доступ к автономным функциям. MakeImplV1, MakeImplV2, MakeImplV3 и так далее, созданный путем переименования MakeImpl через препроцессор. Используйте эти функции для получения экземпляров Wrapper которые обращаются к различным версиям целевой библиотеки.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]