Как я могу изолировать символы библиотек C / C ++ / OBJC от C / C ++ / OBJC друг от друга?

StackOverflow https://stackoverflow.com/questions/3558394

Вопрос

У меня есть проект, который должен включать в себя две сторонние библиотеки, Liba и libb. У меня мало, если таковые имеются, влияют на сторонние библиотеки. Проблема заключается в том, что как Liba, и Libb включают разные версии общей библиотеки, ASIHTTPREQUEST. В результате я получаю ошибки, как:

-[ASIFormDataRequest setNumberOfTimesToRetryOnTimeout:]: unrecognized selector sent to instance 0x3b4170

, что я могу только предположить, потому что Liba ссылается на реализацию Libb ASIHTTPREQUEST (или на другую сторону).

Я пытался играть с strip -s <symbol file> -u <library> Чтобы выделить символы библиотек друг от друга, но это приводит к либлюще XCODE, выпившими тысячи предупреждений и на самом деле не зафиксирует основную проблему, изложенную выше.

ld: warning: can't add line info to anonymous symbol anon-func-0x0 from ...

В целом, как можно / следует отделять библиотеки друг от друга?

Это было полезно?

Решение

Нет абсолютно никакого способа сделать это. Одно приложение Objective-C может иметь только одно значение для одного символа одновременно. Если вы загружаете две разные версии одной библиотеки, последний перезаписывает первый.

Две обходные пути:

  1. убедить разработчику использовать недавнюю версию
  2. Выполните обе библиотеки в отдельных процессах

Другие советы

Если они использовали одно и то же название символа линкера для разных процедур, единственным выходом (короткие взлома их объектных файлов), состоит в том, чтобы связать их в разные исполняемые файлы.

На платформах, которые поддерживают динамическое связывание (например,: DLL), вы можете построить один или как в отдельной DLL. Если они не являются частью экспортируемого интерфейса, символы не должны столкнуться.

В противном случае вы будете застрять вносить их в совершенно отдельные процессы и использовать IPC для передачи данных между ними.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top