#xcode #linker #static-libraries
#xcode #компоновщик #статические библиотеки
Вопрос:
У нас есть несколько машин для разработки, на некоторых из которых работает Xcode 3.2.5, а на других — Xcode 4.2. У нас есть статическая библиотека, на которую ссылается наш проект. Он содержит категории Objective C, поэтому нам нужно использовать флаг -force_load с путем к библиотеке.
Проблема, с которой мы сталкиваемся, заключается в том, что в Xcode 4.2 библиотека связана из другого местоположения, отличного от пути, который мы указали в -force_load . Это приводит к ошибкам дублирования символов, поскольку он пытается связать две копии одной и той же библиотеки.
Путь, по которому ссылается Xcode 4.2, таков: /Users/USERNAME/Library/Developer/Xcode/DerivedData/PROJECTNAME-ehxeazvigqrpvogkxlkcmdzpisdw/Build/Products/CONFIGURATION-PLATFORM/
принимая во внимание, что местоположение, на которое ссылается Xcode 3.2.5, является: PROJECT_ROOT_OF_STATIC_LIBRARY / build / CONFIGURATION-PLATFORM/
Есть ли способ заставить Xcode 4.2 использовать те же местоположения, что и Xcode 3.2.5, при связывании статических библиотек, чтобы мы могли использовать опцию компоновщика force_load ? Если нет, может ли кто-нибудь предложить альтернативное решение, чтобы заставить Xcode 3.2.5 и 4.2 хорошо работать вместе?
Ответ №1:
Мне кажется, что вы делаете все по-своему.
Я никогда не использовал -force_load для загрузки статических библиотек. Все библиотеки, которые я использую, хранятся как фреймворки в каталоге моей системы, который отделен от проекта. Затем я использую стандартные диалоговые окна добавления фреймворков XCode, чтобы перенести их в проект, и «-ObjC -all_load», чтобы убедиться, что они работают, а категории активны.
Я успешно переместил несколько проектов с XCode 3 на 4 и не столкнулся с проблемой, о которой вы упоминаете. Я подозреваю, что если вы сможете прекратить использовать -force_load, ваши проблемы исчезнут.
Комментарии:
1. Мы пытались использовать all_load, но другая статическая библиотека в конечном итоге выдавала повторяющиеся ошибки символов, поэтому мы переключились на принудительную загрузку, чтобы обеспечить принудительную загрузку только библиотеки с категориями.
2. После повторного просмотра другой статической библиотеки я понял, что вызывало ошибки повторяющихся символов, и исправил это. Итак, теперь -all_load работает. Спасибо!