Ответ 1
Единственное безопасное решение (кроме того, что это вообще не делается) заключается в создании любых зависимостей с префиксом для всех символов.
Самый простой способ префикса - классический "поиск и замена". Это подвержено ошибкам, поэтому неплохо нажать на .a с помощью nm -a
и прокрутить результаты для любых символов без префикса.
Второй, гораздо более безопасный метод заключается в использовании двухпроходного процесса компиляции.
- Первый проход строит зависимый проект и запускает
nm
, чтобы выгрузить все символы в файл заголовка. - Второй проход снова создает зависимый проект, но на этот раз сгенерированный файл заголовка префикса, импортированный в предварительно скомпилированный заголовок. Этот заголовок префикса должен использоваться везде, где вы ссылаетесь на символы из зависимости в своей структуре, чтобы правильно ссылаться на переименованные символы.
Для справки мы используем это с Nimbus для создания заголовков префикса Nimbus: https://github.com/jverkoey/nimbus/blob/master/scripts/generate_namespace_header
Это позволяет вам распространять .framework с префиксной версией внедренного Nimbus.
Теперь вы можете связать полученный .a с вашей картой и безопасно избегать конфликтов компоновщиков, когда сторонний разработчик неизбежно связывает свою версию зависимости в своем проекте.