Совместимость с Xcode 3/4 при обращении к статическим библиотекам

#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 работает. Спасибо!