Вот ситуация, у меня есть кодовая база C ++, которая использует недавний GCC (4.3.3), но мне нужно ссылаться на более старую библиотеку, которая была построена с использованием GCC 3.2.3. Нет более новой доступной версии библиотеки, я не могу обойтись без нее, и это закрытый исходный код, поэтому он не может быть восстановлен.
Похоже, это создает проблему, поскольку между GCC 4.3.3 и 3.2.3 существуют несовместимости ABI, поэтому я пытаюсь выяснить, какие у меня есть варианты решения этой проблемы.
Несколько дополнительных деталей:
- Я могу перестроить все в моей кодовой базе с -fabi-version = 1, чтобы получить правильную версию ABI, но я зависим от некоторых новых функций из libstdc ++ версии 6.
- Все зависимости библиотеки C ++ вне кодовой базы имеют открытый исходный код, поэтому я могу перестроить их по мере необходимости, за исключением этой одной библиотеки.
- Множество зависимостей библиотеки C, которые невозможно перестроить или которые трудно перестроить.
- Старая библиотека, похоже, зависит от некоторых функций libstdc ++ версии 5
Я до сих пор пробовал:
- Перестроить весь код C ++ и зависимые библиотеки с -fabi-version = 1 и связать с libstdc ++ версии 6. Это не удается из-за нескольких неопределенных ошибок символов для символов стандартной библиотеки C ++.
- То же, что и выше, но дополнительно ссылка в общей библиотеке для libstdc ++ 5, это решает проблемы компоновщика, но, по-видимому, приводит к смешиванию двух версий во время выполнения внутри устаревшей библиотеки и вызывает сбой.
Я прочитал эту страницу: http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html, которая, кажется, указывает на то, что можно смешивать версии C ++ ABI в приложении для удовлетворения различных зависимостей между библиотеками. Похоже, здесь это не очень хорошо работает, если только я что-то упустил.
Есть идеи?