c ++: статически ссылаться на разные версии одной и той же библиотеки? - PullRequest
0 голосов
/ 01 ноября 2019

Я включаю стороннюю библиотеку в свой код. Я поддерживаю статическую ссылку на него и не могу поддерживать динамические ссылки (что было бы самым простым решением проблемы, но в моем случае это невозможно). Недавно разработчик этой библиотеки опубликовал обновление, которое включает в себя некоторые критические изменения (параметры функций изменены в API, добавлены / удалены функции и т. Д.).

У меня есть пользователи, которые полагаются на функции старой версиибиблиотека, и пользователи, которые захотят новые функции, а также. Я хотел бы избежать необходимости компилировать несколько версий моего кода для поддержки нескольких версий библиотеки. Вместо этого я хотел бы включить в свой интерфейс переключатель, позволяющий пользователям выбирать, какую версию библиотеки они хотели бы использовать.

Когда речь идет о компиляции моего кода, если я попробую наивное решение ипросто включив как старые, так и новые библиотеки, я получаю ошибки с множественными символами (потому что не все сигнатуры функций между версиями различаются) и т. д., и многие из имен файлов заголовков идентичны, так что нет прямого способа различитьво многих случаях между ними.

Я думал о создании промежуточной библиотеки-обертки для обеих библиотек ... обертки будут скомпилированы отдельно, а их API-интерфейсы будут размещены в разных пространствах имен, а затем включены в мой код. Затем я бы вызвал другую оболочку, в зависимости от моих потребностей, которая будет обращаться к соответствующей библиотеке изнутри .... но возможно ли такое? Я хотел спросить здесь, прежде чем приложить все усилия по настройке этих оболочек, только чтобы снова столкнуться с теми же ошибками определения нескольких символов ...

Или есть другой способ? Заранее спасибо.

1 Ответ

0 голосов
/ 01 ноября 2019

Ваше описанное решение в значительной степени способ сделать это. Вы не столкнетесь с ошибками множественного определения, если ваши промежуточные обертки предоставляют только ваш пользовательский интерфейс, а не символы из сторонней библиотеки.

...