Конфликты имен общих библиотек

Я распространяю разделяемую библиотеку (c ++) и модуль python, который использует эту библиотеку. Я создаю модифицированную версию Bullet Physics Library (как подпроект CMake).
Я использую только классы и функции Bullet в одном файле — bullet_interface.cpp — и все содержимое Bullet скрыто внутри «namespace {…}».

Проблема в том, что некоторые другие библиотеки требуют Bullet как системную зависимость и ссылаются на системную версию Bullet. Фактически, одна из зависимостей моей библиотеки (libopenrave) экспортирует символы Bullet. (более конкретно, иногда он динамически загружает плагин, который экспортирует символы Bullet).

Мне интересно, есть ли способ построить мою библиотеку, чтобы bullet_interface.cpp использовал правильные функции Bullet, но тогда моя библиотека не делает видимыми какие-либо символы Bullet.
Я не могу использовать системный маркер, потому что мне пришлось вносить изменения в исходный код.
Одним хакерским решением было бы переименовать все функции и классы Bullet с помощью поиска и замены (почти все содержат строку «bt»). Есть ли способ лучше?

8

Решение

Это немного обходной способ выполнить то, что вы хотите, но это лучше, чем поиск и замена в маркированном коде.

Вы можете попробовать префиксировать символы в библиотеке маркеров, используя objcopy Утилита, как это:

objcopy --prefix-symbols=old_ bullet.a

это должен работать с динамической библиотекой, но вам придется попробовать. Увидеть этот ответ для деталей.

2

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

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

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