Вопрос приближается к десятилетию, но постоянно появляются новые поиски ...
Как уже было сказано, objcopy с флагом --redefine-sym - хороший выбор в Linux. Смотрите, например, https://linux.die.net/man/1/objcopy для полной документации. Это немного неуклюже, потому что вы по сути копируете всю библиотеку при внесении изменений, и каждое обновление требует повторения этой работы. Но, по крайней мере, это должно сработать.
Для Windows динамическая загрузка библиотеки - это решение, и постоянное, как альтернатива dlopen в Linux, будет. Однако и dlopen (), и LoadLibrary () добавляют дополнительный код, которого можно избежать, если единственной проблемой являются повторяющиеся имена. Здесь решение Windows более элегантно, чем подход objcopy: просто скажите компоновщику, что символы в библиотеке известны под другим именем, и используйте это имя. Там несколько шагов, чтобы сделать это. Вам нужно создать файл def и предоставить перевод имени в разделе EXPORTS. См. https://msdn.microsoft.com/en-us/library/hyx1zcd3.aspx (VS2015, в конечном итоге он будет заменен более новыми версиями) или http://www.digitalmars.com/ctg/ctgDefFiles.html (возможно, более постоянный) для получения полной информации о синтаксисе файла def. Процесс будет состоять в том, чтобы создать файл def для одной из библиотек, затем использовать этот файл def для создания файла lib и затем связать его с этим файлом lib. (Для библиотек Windows Windows только файлы lib используются для компоновки, а не для выполнения кода.) См. Как создать файл .lib, когда есть файл .dll и файл заголовка для процесса создания файла lib. , Здесь единственная разница - добавление псевдонимов.
Для Linux и Windows переименуйте функции в заголовках библиотеки, чьи имена являются псевдонимами. Другой вариант, который должен работать, заключается в том, чтобы в файлах, ссылающихся на новые имена, #define old_name new_name, #include заголовки библиотеки, чьи экспорты были псевдонимами, и затем #undef old_name в вызывающей программе. Если есть много файлов, использующих библиотеку, более простой альтернативой является создание заголовка или заголовков, которые обертывают определения, include и undefs, а затем используют этот заголовок.
Надеюсь, эта информация была полезна!