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
CodeVomit
fonte
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

Gajendra K Chauhan
fonte
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

Daniel
fonte
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.

Dante Cesa
fonte
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.

mahi
fonte
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.

cate
fonte
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

dnaatwork.com
fonte
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.

p.pad
fonte
26

Correção: Configurações de compilação> Ativar código de bits> Não insira a descrição da imagem aqui

Sebastián Lara
fonte
Santo tiro ..! Isso funcionou para mim :)
Droid Genie
24

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

pod deintegrate

pod install

Problema resolvido!

Johannes
fonte
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.

CodeVomit
fonte
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".

Wolfert
fonte
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.

tigerswim19
fonte
11

Eu tive esse problema e a importação o QuartzCorecorrigiu.

jmosesman
fonte
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.

Nishanth Nair
fonte
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.

Macmade
fonte
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.

Misha Karpenko
fonte
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.

Grady Player
fonte
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!

Kjuly
fonte
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.

Flaviu
fonte
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 :)

Sherlock
fonte
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

Adela Toderici
fonte
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!

Kim Jin
fonte
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.

ChrisP
fonte
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ê !

Rudi
fonte
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..

Niks
fonte
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

user4886069
fonte
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.

Enchilada
fonte
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.

moliveira
fonte
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.

Rembrandt Q. Einstein
fonte