Проклятые ошибки компоновщика XCode 4.3 - алгоритм их решения?

Неопределенные символы для архитектуры i386:
"_OBJC_CLASS_$_AppDelegate_Shared", ссылка из: _OBJC_CLASS_$_AppDelegate_iPad в AppDelegate_iPad.o "_OBJC_METACLASS_$_AppDelegate_Shared", ссылка из: _OBJC_METACLASS_$_AppDelegate_iPad в AppDelegate_iPad. архитектура i386 clang: ошибка: команда компоновщика завершилась неудачно с кодом выхода 1 (используйте -v, чтобы увидеть вызов)

Здравствуйте, это прямой AppDelegate, и я получаю эту ошибку. Любые идеи? Там нет библиотеки, на которую можно было бы ссылаться или что-то в этом роде. Я снова и снова видел эти ошибки в XCode, но причины варьировались от неправильной библиотеки libxml2 (нужна libxml2.7.3) до чего-то странного в самом XCode. Не знаю, что делать дальше, но, очевидно, хотелось бы, чтобы программа скомпилировалась. Спасибо!


person user798719    schedule 21.02.2012    source источник
comment
Однажды я потратил две недели на отладку ошибки компоновщика. Я ненавижу их.   -  person Almo    schedule 22.02.2012
comment
Спасибо, мне становится легче. Я уже провел 1 неделю в прошлом, и решение было совершенно случайным.   -  person user798719    schedule 22.02.2012
comment
Мой оказался неправильно написанным оператором ==. Генерировал несоответствие Low/Hi что-то. Пришлось скомпилировать 118 файлов .o с разными уровнями оптимизации, затем запустить скрипт, чтобы попытаться связать все неоптимизированные файлы, кроме одного, и сообщить об ошибках. Затем прокомментируйте половину файла, скомпилируйте, прокомментируйте другую половину, скомпилируйте, прокомментируйте четверть... и т. д., чтобы сузить его до оскорбительного утверждения. ТОГДА мне пришлось выяснить, почему это безобидное сравнение с NULL вызывало ошибку компоновщика. Зло, зло, зло. В какой-то момент даже посмотрел исходники ld!   -  person Almo    schedule 22.02.2012
comment
Что ж, решение в этом случае заключалось в том, что AppDelegate_shared.m по какой-то причине не был в источниках компиляции Target. Я на 100% полностью виню в этом XCode. 100%. Я перетащил свой AppDelegate в проект, и ВСЕ ЕЩЕ он не был добавлен в список источников компиляции. Это должно происходить автоматически. У других людей тоже будет эта проблема. Поэтому нажмите на свою цель (перейдите к значку своего проекта и найдите свою цель, как правило, со значком вашего приложения. Щелкните один раз по нему. Затем найдите этапы сборки, и вы увидите Источники компиляции. Добавьте туда отсутствующий файл .m и по крайней мере, это сработало для меня.   -  person user798719    schedule 22.02.2012
comment
Ох. Противный. Что ж, напишите свой комментарий как ответ, а затем примите его после того, как таймер позволит вам это сделать.   -  person Almo    schedule 22.02.2012
comment
@user798719 user798719 Нет, если флажок «Добавить в цель» не установлен.   -  person jrtc27    schedule 22.02.2012


Ответы (1)


то же самое. Спасибо за ответ.

Я только что (буквально 30 секунд назад) перетащил файлы. Я использовал те же файлы в других проектах без проблем. получил эту ошибку компоновщика (вчера обновлен до XCode 4.3) и ту же проблему, файл .m был проверен на членство в тестовой цели, но НЕ в цели приложения.

возможно баг 4.3. кажется, что по умолчанию добавлены перетаскиваемые файлы в тестовую сборку, а не в сборку приложения.

спасибо... вы помогли мне найти его очень быстро. Я не ждал этого.

person Paul    schedule 09.03.2012