Xcode - заставить force_load работать с относительными путями - PullRequest
17 голосов
/ 25 января 2011

Некоторые библиотеки требуют флаг компоновщика -all_load при связывании с проектом Xcode.Однако это приводит к ошибке компоновщика, если между библиотеками возникают конфликты символов.Решением является использование -force_load, что позволяет эффективно использовать -all_load в некоторых библиотеках, но не в других.

Однако это, в свою очередь, приводит к новой проблеме, по крайней мере для меня.Всякий раз, когда я использую -force_load с относительным путем к библиотеке, компоновщик всегда находит символьные конфликты между библиотекой и самой собой.Похоже, что компоновщик считает, что библиотека с ее абсолютным путем и библиотека с ее относительным путем - это разные библиотеки, и поэтому находит конфликты между библиотекой и самой собой.

Я могу избежать этого, используя абсолютный путь с флагом.Но это не чудесное решение, так как удобно хранить исходный код для библиотек в моем каталоге документов.Но путь к каталогу документов будет другим на других машинах.

Вопрос: Кто-нибудь может заставить force_load работать с относительным путем к библиотеке?

РЕДАКТИРОВАТЬ:для справочной информации см. этот вопрос

Ответы [ 2 ]

36 голосов
/ 23 февраля 2011

С Xcode 4, если вы включите проект библиотеки в проект приложения, то вы можете добавить это к другим флагам компоновщика:

-force_load $(BUILT_PRODUCTS_DIR)/<library_name.a>

Вам все еще нужна зависимость, и вам нужно добавитьбиблиотека в списке фаз фазы и библиотек.

РЕДАКТИРОВАТЬ: Apple теперь говорит, что в некоторых версиях Xcode 4 вы можете просто использовать этот флаг компоновщика: "-ObjC", чтобы получить библиотеки с категориями для правильной загрузки,Этот флаг прекрасно работает для меня в Xcode 5. Люди все еще голосуют за этот ответ, но я подозреваю, что флаг -ObjC сейчас является лучшим решением.

8 голосов
/ 09 мая 2013

Это сработало для меня.Как и в ответах, приведенных выше, вам все равно нужно включить библиотеку в проект.

-force_load $(SRCROOT)/pathToLibraryFromProject/libname.a

Для пути это просто папки в вашем проекте, которые ведут к вашей библиотеке, например BaseFoler / Subfolder / libName.А.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...