Обновлен до Xcode 4 - Бесконечный поток дублированных ошибок символов, вызывающих ошибки сборки

Все отлично работало в Xcode 3 вчера, пока я не обновился. Поэтому я завершил обновление, перезапустил свой компьютер и открыл свой старый проект. Мне пришлось перенастроить несколько параметров, таких как пути заголовков, чтобы я мог начать компилировать. Я использую AdWhirl для рекламного посредничества, и в этот момент мои ошибки начинают читать что-то вроде

   duplicate symbol _OBJC_METACLASS_$_SBJSON in /Users/Admin/Desktop/TMapLiteAdwhirl/AdWhirl/MMSDK/libMMSDK.a(SBJSON.o) and 
/Users/Admin/Library/Developer/Xcode/DerivedData/TruxMapLite-bgpylibztethnlhkfkdumpvrjvgy/Build/Intermediates/TruxMapLite.build/Debug-iphoneos/TruxMapLite.build/Objects-normal/armv6/SBJSON.o for architecture armv6

Библиотека, на которую он ссылается, является SDK для одной из рекламных сетей, которые я включаю в AdWhirl. Оба "повторяющихся символа" относятся к SAME FILE, но они используют разные пути. Если бы у меня все еще был XCode 3, я бы просто попробовал исключить эти библиотеки из пути сборки, но я понятия не имею, как это можно сделать в Xcode 4. Я пробовал все до конца, чтобы удалить библиотеку и все связанные с ней файлы из моего проекта, но когда я это сделаю, я просто получаю тот же тип ошибки для другой библиотеки в каталоге AdWhirl.

Это невероятно сложно, потому что перед моим обновлением все работало плавно, и я был готов представить свой двоичный файл. Если у кого-нибудь есть какие-либо советы, id будет более чем счастлив попробовать. Спасибо!

Ответ 1

Я столкнулся с подобной проблемой и разрешил ее, отредактировав мои настройки сборки:

  • Выберите Project Navigator из списка навигаторов слева (⌘-1).
  • Выберите файл проекта.
  • Выберите цель из списка, который появляется в области редактора.
  • Перейдите на вкладку Build Phases.
  • Отметьте Link Binary with Libraries и/или Compile Sources для дублированная библиотека.

Теперь я не использую одну и ту же конфигурацию библиотеки или проекта, поэтому это может быть вне базы.

Ответ 2

Убедитесь, что вы не импортируете файлы .m.

Эта ошибка вызвала бесконечные проблемы для меня.

Ответ 3

Я не уверен в вашей настройке, но у меня была аналогичная проблема, и я исправил ее, изменив местоположение сборки. Я установил его на абсолютный путь в xcode 3 и забыл изменить этот параметр в xcode 4. Изменение параметра Derived Data сразу устранило все мои ошибки. Эта опция находится в настройках- > местоположениях

Ответ 4

Я просто исправил эту проблему, заменив @class на оператор #import в файле заголовка для одного из моих классов.

То, что теоретически должно работать только с объявлением @class (и #import в экземпляре реализации), просто не захочет компилироваться с ошибкой "дублировать символ".

Итак, просмотрите свои команды @class и #import.

Ответ 5

Я обнаружил, что у меня были старые объектные файлы в исходных папках из старой сборки Makefile. Когда я добавил исходную папку в XCode, я случайно добавил как исходные, так и объектные файлы. Это привело к дублированию символов. Удалены файлы .o и .lo из моих исходных папок.

В моей исходной папке также была папка .libs из другой старой сборки. Это также содержало файлы .o. Удаление их решило проблему.