Символьный символ Xcode _main
Я получаю следующую ошибку в Xcode 3.2.1 на Snow Leopard 10.6.2 всякий раз, когда я пытаюсь скомпилировать любое приложение для iPhone, сгенерированное Appcelerator Titanium. Однако ошибка сборки появляется только тогда, когда я выбираю iPhone-симулятор в меню архитектуры, и если я выбираю устройство iPhone, я могу запустить приложение на своем устройстве.
Кроме того, симулятор iPhone запускается успешно и выполняет программу непосредственно из среды Titanium, которая использует Xcode для сборки.
Почему это происходит?
ld: duplicate symbol _main in Resources/libTitanium.a(main.o) and /Users/prithviraj/Documents/project/Final/build/iphone/build/Final.build/Debug-iphonesimulator/Final.build/Objects-normal/i386/main.o
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
Ответы
Ответ 1
Я не могу сказать, почему это происходит, но я могу предложить обходное решение. Когда я прокомментировал все содержимое файла main.m, которое было создано для моего проекта Titanium, я смог успешно скомпилировать и запустить на Simulator. Сообщите мне, если это сработает для вас.
Ответ 2
Проверьте, есть ли в вашем проекте несколько объявлений главной функции.
Ответ 3
Я просто провел пару часов, сражаясь с этим. Это было потому, что я использовал флаг -all_load linker. Если вы используете этот флаг, чтобы обойти ошибку категории, есть и другие решения - см. здесь.
Ответ 4
У меня была аналогичная проблема. Класс unit test был случайно включен в мою сборку. Если вы ищете свой проект для "main (" вы, вероятно, найдете дубликаты функций.
Ответ 5
Это случилось со мной по двум причинам:
1: класс A вызывает класс B, и оба импортировали один и тот же класс. Исправьте его, импортировав класс в файл .m.
2: У двух классов есть константа с тем же именем (даже если константа определена в файле .m). Исправьте его, изменив имя константы.
Ответ 6
Я обнаружил, что это произошло, когда у меня был файл реализации с основной функцией в нем (скажем, abc.m), а также был еще один main.m
. Как только я прокомментировал основную функцию в abc.m
, проект был скомпилирован успешно.
Ответ 7
Кажется, что есть несколько способов войти в это состояние. Моя была другая. Я прочитал подсказку, где вы могли бы перетащить из селектора событий .xib в .h реализацию вашего контроллера представления, и он будет автоматически генерировать ваши методы. Это было - это было круто. Я сразу же начал получать повторяющиеся ошибки символов - это было не здорово.
У меня не было времени углубиться в компоновщик, чтобы узнать, что произошло. Я создал новый контроллер представления, скопировал контекст моего старого .xib в нового парня. Удалены старые .h,.m и .xib и созданы, и они снова работали. Очень странное, очень раздражающее время.
Существует определенная ошибка с этим удобством xcode.
Ответ 8
Основываясь на том, что я могу сказать из этих других ответов, мне нужно будет удалить кучу методов main
.
Но для этого мне сначала нужно удалить все комментарии gd из моих файлов, потому что они усердно документированы с комментариями почти в любой другой строке
Это регулярное выражение соответствует всем многострочным комментариям C, включая их разделители, и может помочь вам в вашем путешествии.
/\*((?!\*/).)*\*/
Ответ 9
У меня была эта проблема, потому что я определяю файл как таковой:
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
...
}
А также был файл main.m:
int main(int argc, char* argv[])
{
@autoreleasepool {
int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
return retVal;
}
}
Ответ 10
Я потратил больше часа на поиск правильного ответа, но ничего не работало для меня.
Наконец, скопированный им xcode дублируется, поэтому перейдите к этой конкретной папке (в данном случае:/Users/prithviraj/Documents/project/Final/build/iphone/build/Final.build/Debug-iphonesimulator/Final.build/Objects-normal/i386/main.o) и удалите все файлы, а также проверьте в своем проекте одинаково, объявлен ли этот конкретный класс/интерфейс дважды, если да, удалите его.
После удаления очистите и запустите проект.
Это помогло мне надеяться, что это поможет (-_-).
Ответ 11
Удалите папку /Users/{username}/Library/Developer/Xcode/DerivedData
и снова создайте.