Pergunta

Estou recebendo o seguinte erro no Xcode 3.2.1 no Snow Leopard 10.6.2 sempre que tento compilar qualquer aplicativo para iPhone gerado pelo Appcelerator Titanium.No entanto, o erro de compilação só aparece quando seleciono o simulador de iPhone no menu de arquitetura e se eu selecionar o dispositivo iPhone, posso executar o aplicativo no meu dispositivo.

Além disso, o simulador do iPhone é iniciado com sucesso e executa o programa diretamente do ambiente Titanium que usa Xcode para construir.

Por que isso está acontecendo ?

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

Foi útil?

Solução

Não posso te dizer por que isso está acontecendo, mas posso sugerir uma solução alternativa. Quando comentei todo o conteúdo do arquivo principal. Deixe-me saber se isso funciona para você.

Outras dicas

Verifique se você tem várias declarações de função principal em seu projeto.

Acabei de passar algumas horas lutando contra este. Era porque eu estava usando o sinalizador -Al_Load Linker. Se você estiver usando essa bandeira para contornar o bug da categoria, existem outras soluções - veja aqui.

Eu tive um problema parecido. Uma aula de teste de unidade foi incluída acidentalmente na minha construção. Se você pesquisar seu projeto por "Main (", provavelmente encontrará as funções duplicadas.

Isso aconteceu comigo por 2 motivos:

1:A classe A chama a classe B e ambas importaram a mesma classe.Corrija importando a classe no arquivo .m.

2:Duas classes possuem uma constante com o mesmo nome (mesmo que a constante esteja definida no arquivo .m).Corrija alterando o nome das constantes.

Eu tive esse problema porque defino um arquivo como tal:

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

E também tinha um arquivo main.m:

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

Parece que existem várias maneiras de entrar nesse estado. O meu era diferente. Eu li uma dica em que você poderia arrastar de um seletor de eventos .xib para a implementação .h do seu controlador de exibição e isso automaticamente seus métodos. Fiz - o que foi legal. Eu imediatamente comecei a obter erros de símbolos duplicados - o que não foi legal.

Não tive tempo de me aprofundar no vinculador para ver o que aconteceu. Criei um novo controlador de exibição, copiei o contexto do meu antigo .xib no novo cara. Excluiu o antigo .h, .m e .xib e construído e funcionou novamente. Desperdício de tempo muito estranho e muito irritante.

Obviamente, há alguns bugs com este xcode "conveniência".

Descobri que isso aconteceu quando tive um arquivo de implementação com uma função principal (digamos ABC.M) e também tinha outro main.m. Uma vez eu comentei a função principal em abc.m, o projeto compilou com sucesso.

Com base no que posso dizer dessas outras respostas, vou precisar remover um monte de main métodos.

Mas, para fazer isso facilmente, primeiro preciso remover todos os comentários do GD dos meus arquivos, porque eles são assiduamente documentados com comentários em quase todas as outras linhas

Esta expressão regular corresponde a todos os comentários de várias linhas C, incluindo seus delírios e pode ajudá-lo em sua jornada

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

Passei mais de uma hora em procurar uma resposta correta, mas nada funcionou para mim. Finalmente, o Xcode se autodenomina que algo é duplicado, então vá para essa pasta em particular (neste caso: /users/prithviraj/documents/project/final/build/iphone/build/final.build/debug-iphonesimulator/fuild.build/ Objetos Normal/i386/main.o) e exclua todos os arquivos e também verifique o mesmo em seu projeto se essa classe/interface específica foi declarada duas vezes, se sim, exclua-o.

Após a exclusão, limpe e execute o projeto.

Funcionou para mim espero que isso ajude (-_-).

Excluir /Users/{username}/Library/Developer/Xcode/DerivedData pasta e construa novamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top