Erro do Apple Mach-O Linker ao compilar para o dispositivo


238

Acabei de atualizar para o xcode 4.0 e não consigo mais implantar no iPhone, recebo um erro do Apple Mach-O Linker, mas ainda funciona para o simulador.

    Ld /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel normal armv7
    cd /Users/yveswheeler/iParcel
    setenv IPHONEOS_DEPLOYMENT_TARGET 3.2
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -F/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -filelist /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel.LinkFileList -dead_strip -all_load -ObjC -lxml2 -miphoneos-version-min=3.2 -framework UIKit -framework CoreGraphics -framework QuartzCore /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a -framework AddressBook -lz.1.2.3 -framework Foundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -framework MessageUI -framework AudioToolbox -o /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel

arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a: No such file or directory
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 failed with exit code 1

37
Que diabos?! Tantos problemas diferentes para a mesma mensagem de erro. Bom trabalho Apple!
Iulian Onofrei

17
"ERRO: Ocorreu um erro" seria mais útil :))
Aviram Netanel

Veja os avisos que o Linker cospe antes do erro; isso pode levar a uma solução melhor / mais específica.
Pro Q

Respostas:


216

Aqui está a solução permanente. Geralmente, o projeto de substituição pode causar esse problema. Tente este método.

-UPDATE - Clang error - Erro do Mach-O Linker

Em alguns casos, a janela do log de erros exibindo erro .xctest, para corrigi-lo

-> Selecione seu projeto

-> Ao lado disso (logo antes da guia Geral), selecione o arquivo projectTest no menu suspenso

-> Existe uma opção (como ProjNameTests)

-> No Aplicativo Host, selecione seu projeto no menu suspenso apenas se ele mostrar

FEITO!

insira a descrição da imagem aqui

Método antigo excluído


4
Se eu remover o caminho de pesquisa quadro do que eu estou recebendo não pode encontrar o arquivo de cabeçalho
Danpe

62
Eu acho que não entendi. O que devo fazer…?
Fabian

1
@fabian Apenas saltar para fora e tentar solução alternativa :-)
Gajendra K Chauhan

4
Salvou meu dia, cara. Sentado na frente do meu chefe, preciso mostrar a ele o aplicativo em que estou trabalhando e recebi esse erro no vinculador. Eu fui embora se não pousou aqui: D
Saraz

2
Onde está o aplicativo host na etapa final?
Kartiikeya

195

Eu tive o mesmo problema e o problema foi que eu acidentalmente importei um arquivo .m em vez de .h em um arquivo de implementação - espero que ajude


1
Impossível encontrar erro! Basta tentar todas as soluções #
AsifHabib

Isso não é verdade, tentei a mesma coisa em um novo projeto e ainda recebo o mesmo erro.
Hemang

Vá para a seção Configurações do projeto e Fases de construção, verifique se você não possui um arquivo .m na seção "Copiar recursos do pacote" em vez de "Fontes de compilação". que funcionou para mim
LuAndre

Impossível encontrar a solução. Eu não sei o que vou fazer ...
Markus

Você salvou minha vida. Muito obrigado!
Isaac

73

Acabei de encontrar o mesmo problema.

A solução (para mim) = verifique suas estruturas.

No meu caso, eu adicionei classes relacionadas ao CoreData sem "CoreData.framework". Adicioná-lo resolveu a reclamação do MACH_O.


6
Isso acontece também quando você vinculou novamente uma biblioteca que não está presente na versão mais recente do SDK. Digamos que você tenha vinculado a libz.1.2.3 e o sdk inclui 1.2.5. Verifique suas estruturas é uma sugestão muito boa! Obrigado Dante!
SlowTree

Graças à SlowTree, a sugestão de salvamento resolveu minha experiência com esse travamento do vinculador. libz.1.2.3 a libz.1.2.5;
Tom Pace

2
Cocoapods vinculou dois libPods.aarquivos para mim (daí os símbolos duplicados). Obrigado, Dante!
Nick Merrill

Sim. Arquivos .a removidos e adicionados novamente do vinculador. Funcionou!
precisa

61

abra o arquivo .xcworkspace e não .xcodeproj. Repito o arquivo .xcworkspace aberto. Todos os seus erros desaparecem.


1
Uau, essa deve ser uma das mensagens de depuração mais insanas. Eu literalmente nunca teria adivinhado que esse era o motivo com base na mensagem fornecida.
Joseph Casey

1
Fiz o truque para mim porque havia uma biblioteca externa que não estava incluída no .xcodeproj. tinha a ver com CocoaPods
Sjoerd de Wit

Isso funcionou para mim. Como o @SjoerddeWit disse - a inclusão dos cocoapods requer a abertura do .xcworkspace em vez do .xcodeproj.
Cody Richmond

Salvou o meu dia! +1
Bruno Monteiro

Tenho exportado um projeto de unidade para o Xcode e não há nenhum arquivo .xcworkspace
Ayush Malviya

36

Re: Problema como descrito no título:

Apenas no caso de alguém perder o óbvio ...

Me deparei com esse erro depois de instalar uma nova versão do Xcode4 e arrastar os arquivos existentes para um novo projeto. Não consegui identificar que a caixa de seleção 'adicionar aos destinos' foi deixada desmarcada na caixa de diálogo 'Escolha opções para adicionar arquivos:'. Corrigir minha omissão em Destinos> Criar fases> Compilar fontes resolveu o problema.


Esse truque funcionou para mim. obrigado. Eu apaguei todos os diretórios de compilação e recriei o projeto.
Vivek Gyaneshwar

34

Menu> Produto> Limpo, foi isso que fez funcionar. Eu não tenho certeza sobre todos os outros. Eu adicionei foto para mostrar.

insira a descrição da imagem aqui


1
Impressionante. De longe, a solução mais fácil que pude encontrar.
Vincent van Leeuwen

29

Erro bizarro. Para mim, limpei e reiniciei o Xcode e o problema foi resolvido.



24

Nenhuma dessas respostas me ajudou. Então eu tentei reinstalar o Cocoapods:

pod deintegrate

pod install

Problema resolvido!


Não sei ao certo onde está a desconexão com os pods e o xcode, mas muitas vezes é difícil garantir que os arquivos dos pods cheguem à pasta derivadaData. Isso parece corrigir esse problema. Eu gostaria de poder começar apenas esta resposta ..
Jacksonkr

20

O problema era que no XCode 4, as dependências não assumem as configurações de arquitetura do projeto principal, como fizeram anteriormente no XCode 3. Eu tive que passar por todas as minhas dependências, definindo-as para a arquitetura correta.


2
obrigado! Fui enganado pelo fato de a mensagem de erro do vinculador reclamar sobre "Arquivo não encontrado", não "Arquivo encontrado, mas não posso usá-lo ..." e estava vagando pelas configurações do xcode procurando por pesquisa na biblioteca caminhos. Mas isso funcionou para mim. E se você está tendo esse problema, este outro post também está relacionado: stackoverflow.com/questions/2999844/three20-and-ios-4 . Além disso, este belo blog de resumo: amirnaor.com/?p=112
Rob

13

Eu tinha o mesmo e consegui resolvê-lo.

Nas preferências do xcode , a guia local altera o valor em local da construção para " Place build products in locations specified by targets".


Obrigado Wolfert, tentei isso, mas ainda tenho 1250 Apple Mach-O Linker Warnings e nenhum progresso. Você fez mais alguma coisa para consertar isso? Felicidades

Obrigado Wolfert! você economizou meu tempo.
Sunil Targe

6
A opção não está disponível no XCode 5.1
Hemang

13

Eu lutei com isso por um tempo e, no meu caso, acabou sendo a Configuração de Compilação em Caminhos de Pesquisa chamada FRAMEWORK_SEARCH_PATHS. Ajudou a seleção do botão "Níveis", que parecia comparar meu projeto, destino e configurações "Resolvidas". Vi que minha configuração de destino substituiu de alguma forma o padrão "$ (herdado)", e o valor substituído foi o que o XCode "resolveu" a configuração. Quando removi a substituição, que neste caso especificou o 3,2 sdk, os erros do vinculador desapareceram - assim como alguns avisos recentes apareceram sobre qualquer classe em que chamei métodos pós-4.0.

Sobre esses avisos - nunca os vi antes de adicionar a estrutura do MessageUI para uma alteração recente. Suspeito, mas não sei ao certo, que quando adicionei essa estrutura, o XCode tentou fazer algo inteligente, adicionando essa substituição ao meu destino. Eu não fiz isso explicitamente em nenhum momento. Os avisos foram, por exemplo, sobre o método URLByAppendingPathComponent de NSURL, que não apareceu até o sdk 4.0. Antes de adicionar a estrutura MessageUI, nunca recebi esse aviso. E desde que removi a substituição, não as recebo mais.



8

Alterar "Construir somente arquiteturas ativas" para Sim em CordovaLib.xcodeproj -> Configurações de compilação fez o truque para mim. anteriormente, o aplicativo estava sendo executado no simulador, mas não no dispositivo.


7

Pode ser necessário atualizar suas configurações de compilação.

Verifique a versão de destino do iOS e as arquiteturas do processador, pois você pode não ter os SDKs antigos com o XCode 4.

Você pode ver "SDK ausente" nas configurações de compilação. Mude isso para o que for aplicável.


Essa é praticamente a primeira coisa que faço sempre que atualizo o xcode. Desta vez não é o problema.
CodeVomit 16/03

7

Eu tive o mesmo problema: excluí acidentalmente um arquivo .m, enquanto .h estava no projeto. O problema desapareceu quando eu restaurei o arquivo .m.


6

Verifique se você não possui um caminho de pesquisa de estrutura específico especificado. se você acessar as informações no destino e apenas remover as entradas do caminho de pesquisa da estrutura, ele deverá usar os padrões da versão de implantação especificada.


5

Eu apenas tento criar um category classarquivo e consegui esse problema estranho ... e finalmente ....

Maneira errada de criar uma classe de categoria que causa o problema:

New File-> Cocoa Touch-> Objective-C class, modifiquei o nome dos arquivos para Categoria de categoria como o nome .. (ou seja , OriginalClass_CategoryName.h/mpara OriginalClass+CategoryName.h/m, e também modifiquei o conteúdo do arquivo).

Caminho certo aqui:

New File-> Cocoa Touch-> Objective-C category, e ele gera automaticamente arquivos ( OriginalClass+CategoryName.h/m).

Oh, como eu sou estúpido!


5

Se você estiver usando CoreData e usar XCode para gerar subclasses NSManagedObject para suas entidades, certifique-se de gerar apenas uma para cada entidade.

Meu problema foi que ele gerou várias subclasses NSManagedObject para a mesma entidade (e as colocou em pastas diferentes).

Acabei de excluir todos eles e regenerar as subclasses NSManagedObject.


5

Para adicionar à lista de coisas estranhas que corrigiram esse problema ...

Eu tinha algumas variáveis ​​const CGFloat em um arquivo de cabeçalho global como esse

const NSInteger  globalInteger1 = 2;
const NSInteger  globalInteger2 = 3;

No momento em que os removi, estava tudo bem :)


1
Meu problema WEIRD estava no arquivo .pch ou constants.h, declarei uma constante como NSString * const kInitiaNotification = @ "kInitialNotification"; sem mencionar o "estático" em primeiro lugar
Mazen Kasser

Eu tive o problema logo depois que mudei de NSString static *key = @"someKey"paraconst NSString *key = @"someKey"
TonyTony

5

Eu tive exatamente o mesmo problema só porque tinha duas mesmas constantes em classes diferentes. Você também pode ter esse problema se importar arquivo .m e não arquivo .h


Você salva meu dia !!
Teck wei

@teckwei você pode pressionar o upvote arrow: D
Adela Toderici


4

Eu tive o mesmo problema e resolvi-o. No meu caso, a configuração de "arquiteturas" causou o problema. No meu arquivo de projeto, na guia Configurações de compilação, as arquiteturas foram definidas para armv6. Eu mudei para Standard (armv7), limpe e construa. Então funcionou!


4

No meu caso, o problema era ter diferentes arquiteturas especificadas sob diferentes destinos. Eu estava construindo meu destino de aplicativo com armv6, armv7 e cocos2d com Standard (amrv7). Entre nas configurações de compilação e verifique se suas arquiteturas concordam com todos os destinos.


4

Eu resolvi esse problema muito estranho!

Vá para Target > Build Fhases > Link Binary com bibliotecas :

Remova todas as suas estruturas e adicione-as novamente!

Espero que funcione para você !


solução bastante horrível
SleepsOnNewspapers

Ele não pode ser a resposta ... não lógica muito
LKM

Eu verifiquei a mensagem de erro e descobri que era uma das estruturas, então removi essa estrutura e a adicionei novamente, não todas, mas apenas essa.
Oluwatobi Omotayo

4

Para o idioma Swift ...

Estou recebendo este erro "ld: arquivo muito pequeno (comprimento = 0) ...."

No meu caso, apenas limpo o projeto e depois o reconstruo ..

Passos:-

1) goto Projeto -> Limpo

2) vá para Projeto -> Compilar

Espero que isto ajude..


Trabalhou para mim. Aconteceu quando troquei o dispositivo do iPhone 6 para o iPhone 4S.
racl101

Trabalhou para mim também. Muito obrigado
Lee

4

Isso fez um truque para mim:

Vamos para

1) Produtos> limpos

2) Windows> Projetos

3) Selecione seu projeto e clique em " Excluir " dados derivados

4) Produtos> Construção


3

Uma possibilidade: ative "Stript code morto" nas configurações de compilação do Xcode 4.

Outra possibilidade: pode ser que você tenha mudado para o LLVM para alguma estrutura que estava usando o GCC anteriormente. Voltar para o GCC (ou LLVM GCC) pode se livrar desses avisos.


3

Defini por engano uma nova constante com o mesmo nome que uma constante existente em um arquivo diferente e isso causou esse erro para mim usando o xCode 4.3.1. O xCode não reclamou, mas o compilador não gostou.


3

Consegui corrigir esse erro editando "Caminhos de pesquisa da biblioteca"

Ele surgiu em primeiro lugar porque eu havia movido algumas pastas e isso acabou dando às minhas configurações de compilação dois caminhos de pesquisa diferentes, porque eles são adicionados automaticamente às suas configurações de compilação quando você vincula uma biblioteca / estrutura, mas elas não são sempre removido.

Portanto, se você mover uma biblioteca / estrutura vinculada para um diretório diferente e o vincular novamente, terá que editar manualmente o caminho da pesquisa.

Você pode evitar isso removendo a biblioteca / estrutura antes de movê-la, mas eu não testei isso.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.