Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

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

Со мной это произошло по 2 причинам:

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

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

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

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

А еще был файл main.m:

int main(int argc, char* argv[])
{
    @autoreleasepool {
        int retVal = UIApplicationMain(argc, argv, nil, @"AppDelegate");
        return retVal;
    }
}

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

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

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

Я обнаружил, что это произошло, когда у меня был файл реализации с основной функцией (скажем, abc.m), а также был другой main.m.Однажды я закомментировал основную функцию в abc.m, проект успешно скомпилировался.

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

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

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

/\*((?!\*/).)*\*/

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top