Как мне статически связать две версии xerces-c (или любую библиотеку, если на то пошло)?

Я знаю, что это не очень чисто, но как мне это сделать?

По сути, я статически связываю стороннюю библиотеку, которая использует xerces-c 2.7, и я хочу использовать xerces-c 3.1 (для некоторых новейших и лучших функций, которые на самом деле недоступны в 2.x)

Модули, использующие 2.7 (используемые внутри сторонней библиотеки и никогда не подвергавшиеся воздействию моего кода), не имеют ничего общего с модулями, использующими 3.1 (в моем коде).

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

Общее решение, независимое от компилятора, было бы намного лучше.


person owagh    schedule 30.05.2012    source источник
comment
Я столкнулся с этой проблемой некоторое время назад с другой библиотекой (libpng). Если вы используете linux или аналогичный, попробуйте посмотреть stackoverflow. ком/вопросы/8535330/   -  person Alessandro Pezzato    schedule 30.05.2012
comment
Вот такая же проблема у меня. Но решение говорит только о c. Есть идеи, будет ли это работать на С++?   -  person owagh    schedule 30.05.2012
comment
Это работает для С++ (мой проект был на С++)   -  person Alessandro Pezzato    schedule 30.05.2012


Ответы (1)


Другое решение, помимо упомянутого в " Связывание библиотек с несовместимыми зависимостями ", состоит в том, чтобы изолировать разные версии, встроив их в разные динамические библиотеки. Самый простой подход может состоять в том, чтобы переместить код, использующий xerces 3.1, в новую динамическую библиотеку и создать к ней интерфейс. Поскольку вы статически связываетесь с Xerces, это сохранит ссылки внутри динамической библиотеки. Возможно, вам придется изменить настройки видимости gcc, чтобы гарантировать, что только выбранные имена функций экспортируются из динамическая библиотека.

person the_mandrill    schedule 30.05.2012