Символьный символ 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 и снова создайте.