Xcode повторяющийся символ _main - PullRequest
10 голосов
/ 29 марта 2010

Я получаю следующую ошибку в 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

Ответы [ 11 ]

19 голосов
/ 29 марта 2010

Я не могу сказать вам, почему это происходит, но я могу предложить обходной путь. Когда я закомментировал все содержимое файла main.m, сгенерированного для моего проекта Titanium, я смог успешно скомпилировать и запустить на симуляторе. Дайте мне знать, если это работает для вас.

11 голосов
/ 30 января 2011

Проверьте, есть ли у вас несколько объявлений основной функции в вашем проекте.

8 голосов
/ 02 февраля 2011

Я просто потратил пару часов на борьбу с этим. Это потому, что я использовал флаг компоновщика -all_load. Если вы используете этот флаг, чтобы обойти ошибку категории, есть и другие решения - см. здесь .

6 голосов
/ 07 апреля 2011

У меня была похожая проблема. Класс юнит-теста был случайно включен в мою сборку. Если вы ищете в своем проекте «main (»), вы, вероятно, найдете дубликаты функций.

1 голос
/ 09 августа 2015

У меня была эта проблема, потому что я определяю файл следующим образом:

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
... 
} 

А также имел файл main.m:

int main(int argc, char* argv[])
{
    @autoreleasepool {
        int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
        return retVal;
    }
}
1 голос
/ 15 августа 2012

Это случилось со мной по 2 причинам:

1: класс A вызывает класс B, и оба импортировали один и тот же класс. Исправьте это, импортировав класс в файл .m.

2: два класса имеют константу с одинаковым именем (даже если константа определена в файле .m). Исправьте это, изменив имя константы.

0 голосов
/ 24 октября 2017

Удалите /Users/{username}/Library/Developer/Xcode/DerivedData папку и соберите заново.

0 голосов
/ 18 мая 2017

Я потратил больше часа на поиск правильного ответа, но у меня ничего не получалось. Наконец, xcode сам по себе что-то дублирует, поэтому перейдите в эту конкретную папку (в этом случае: /Users/prithviraj/Documents/project/Final/build/iphone/build/Final.build/Debug-iphonesimulator/Final.build/ Objects-normal / i386 / main.o) и удалите все файлы, а также проверьте то же самое в вашем проекте, если этот конкретный класс / интерфейс объявлен дважды, если да, удалите его.

После удаления очистите и запустите проект.

Это сработало для меня, надеюсь, это поможет (-_-).

0 голосов
/ 24 февраля 2014

Исходя из того, что я могу сказать из этих других ответов, мне нужно удалить кучу main методов.

Но чтобы сделать это легко, мне сначала нужно удалить все комментарии gd из моих файлов, потому что они тщательно документированы с комментариями почти на каждой строке

Это регулярное выражение соответствует всем многострочным комментариям C, включая их разделители, и может помочь вам в вашем путешествии

/\*((?!\*/).)*\*/
0 голосов
/ 15 сентября 2012

Кажется, что есть несколько способов войти в это состояние. Мой был другим. Я прочитал подсказку, где вы можете перетащить из селектора событий .xib в реализацию .h вашего контроллера представления, и он будет автоматически генерировать ваши методы. Это было - что было круто. Я сразу начал получать дублированные ошибки символов - что было не круто.

У меня не было времени покопаться в компоновщике, чтобы увидеть, что случилось. Я создал новый контроллер представления, скопировал контекст моего старого .xib в нового парня. Удалил старые .h, .m и .xib и собрал и снова заработал. Очень странная, очень раздражающая трата времени.

Очевидно, что в этом xcode "удобство" есть какая-то ошибка.

...