Error de Apple Mach-O Linker al compilar para dispositivo

238

Acabo de actualizarme a xcode 4.0 y ya no puedo implementarlo en iPhone, recibo un error de Apple Mach-O Linker, aunque todavía funciona para el 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
fuente
38
¡¿Que demonios?! Tantos problemas diferentes para el mismo mensaje de error. Buen trabajo Apple!
Iulian Onofrei
18
"ERROR: se ha producido un error" sería más útil :))
Aviram Netanel
Mire las advertencias que escupe el Linker antes del error; Puede conducir a una solución mejor / más específica.
Pro Q

Respuestas:

216

Aquí hay una solución permanente. La sobrescritura general de proyectos puede causar este problema. Pruebe este método.

-UPDATE - Error de Clang - Error de Mach-O Linker

En algunos casos, la ventana de registro de errores muestra el error .xctest, para solucionarlo

-> Seleccione su proyecto

-> Junto a esto (justo antes de la pestaña General) seleccione su archivo de prueba del proyecto desde el menú desplegable

-> Hay una opción (como ProjNameTests)

-> En la aplicación de host, seleccione su proyecto del menú desplegable solo si muestra personalizado

¡HECHO!

ingrese la descripción de la imagen aquí

Método antiguo eliminado

Gajendra K Chauhan
fuente
44
Si
elimino la
62
Creo que no lo entiendo. Qué tengo que hacer…?
fabian
1
@fabian Simplemente salte e intente una solución alternativa :-)
Gajendra K Chauhan
44
Me salvó el día, hombre. Sentado frente a mi jefe, tengo que mostrarle la aplicación en la que estoy trabajando, y recibí este error de vinculador. Me habría ido si no he aterrizado aquí: D
Saraz
2
¿Dónde está la aplicación host en el paso final?
Kartiikeya
195

Tuve el mismo problema y el problema fue que importé accidentalmente un archivo .m en lugar de .h en un archivo de implementación, espero que ayude

Daniel
fuente
1
Imposible encontrar error! Simplemente pruebe todas y cada una de las soluciones
AsifHabib
Esto no es cierto, he intentado lo mismo en un nuevo proyecto y sigo recibiendo el mismo error.
Hemang
Vaya a la sección Configuración del proyecto y Fases de construcción, asegúrese de no tener un archivo .m en la sección "Copiar recursos de paquete" en lugar de "Compilar orígenes". eso funcionó para mí
LuAndre
Imposible encontrar la solución. No sé qué voy a hacer ...
Markus
Me salvaste la vida. Muchas gracias!
Isaac
73

Acabo de encontrarme con el mismo problema.

La solución (para mí) = verifique sus marcos.

En mi caso, agregué clases relacionadas con CoreData sin "CoreData.framework". Agregarlo resolvió la queja de MACH_O.

Dante Cesa
fuente
66
También ocurre cuando vuelves a vincular una biblioteca que no está presente en la última versión del SDK. Digamos que se vinculó contra libz.1.2.3 y el SDK incluye 1.2.5. ¡Verifique sus marcos es una muy buena sugerencia! Gracias Dante!
SlowTree
Gracias SlowTree, guardar sugerencia resolvió mi experiencia con este bloqueo del enlazador. libz.1.2.3 a libz.1.2.5;
Tom Pace el
2
Cocoapods vinculó dos libPods.aarchivos para mí (de ahí los símbolos duplicados). Gracias Dante!
Nick Merrill
Si. Se eliminaron los archivos .a y se agregaron nuevamente desde el enlazador. ¡Funcionó!
Balasubramanian
61

Abra el archivo .xcworkspace no .xcodeproj. Repito abrir el archivo .xcworkspace. Todos tus errores desaparecerán.

mahi
fuente
1
Wow, ese tiene que ser uno de los mensajes de depuración más locos. Literalmente nunca habría adivinado que esta era la razón basada en el mensaje proporcionado.
Joseph Casey
1
Hizo el truco para mí porque había una biblioteca externa que no estaba incluida en .xcodeproj. tenía que ver con cocoapods
Sjoerd de Wit
Esto funcionó para mí. Como dijo @SjoerddeWit: la inclusión de cocoapods requiere abrir .xcworkspace en lugar de .xcodeproj.
Cody Richmond el
Me salvó el día! +1
Bruno Monteiro
He exportado un proyecto de unidad a xcode y no hay ningún archivo .xcworkspace
Ayush Malviya
36

Re: Problema como se describe en el título:

Por si alguien más se perdió lo obvio ...

Me encontré con este error después de instalar una nueva versión de Xcode4 y arrastrar los archivos existentes a un nuevo proyecto. No pude detectar que la casilla de verificación 'agregar a objetivos' se dejó sin marcar en el cuadro de diálogo 'Elegir opciones para agregar archivos:'. Corregir mi omisión en Targets> Build Fases> Compile Sources resolvió el problema.

cate
fuente
Este truco funcionó para mí. Gracias. Eliminé todos los directorios de compilación y reconstruí el proyecto.
Vivek Gyaneshwar
34

Menú> Producto> Limpiar, esto es lo que lo hizo funcionar. No estoy seguro de todos los demás. Agregué una foto para mostrar.

ingrese la descripción de la imagen aquí

dnaatwork.com
fuente
1
Increíble. Con mucho, la solución más fácil que pude encontrar.
Vincent van Leeuwen
29

Extraño error. Para mí, simplemente limpié y reinicié Xcode y el problema desapareció.

p.pad
fuente
26

Solución: Configuración de compilación> Habilitar código de bits> No ingrese la descripción de la imagen aquí

Sebastián Lara
fuente
Holy Shot ..! Esto funcionó para mí :)
Droid Genie
24

Ninguna de estas respuestas me ayudó. Luego intenté reinstalar Cocoapods:

pod deintegrate

pod install

¡Problema resuelto!

Johannes
fuente
No estoy seguro de dónde está la desconexión con pods y xcode, pero a menudo es difícil asegurarse de que los archivos de pods lleguen a la carpeta derivada de datos. Esto parece solucionar ese problema. Desearía poder comenzar solo esta respuesta ..
Jacksonkr
20

El problema fue que en XCode 4, las dependencias no asumen la configuración de arquitectura del proyecto principal, como lo hicieron anteriormente en XCode 3. Tuve que pasar por todas mis dependencias configurándolas para la arquitectura correcta.

CodeVomit
fuente
2
¡gracias! Me confundí por el hecho de que el mensaje de error del enlazador se queja de "Archivo no encontrado", no "Archivo encontrado, pero no puedo usarlo ...", y estaba deambulando por la configuración de xcode buscando la búsqueda de la biblioteca caminos. Pero esto funcionó para mí. Y si tiene este problema, esta otra publicación también está relacionada: stackoverflow.com/questions/2999844/three20-and-ios-4 . Además, este bonito blog de resumen: amirnaor.com/?p=112
Rob
13

Tuve lo mismo y logré resolverlo.

En las preferencias de xcode , la pestaña de ubicación cambia el valor de la ubicación de compilación a " Place build products in locations specified by targets".

Wolfert
fuente
Gracias Wolfert, probé eso pero todavía tengo 1250 advertencias de Apple Mach-O Linker y ningún progreso. ¿Hiciste algo más para arreglar esto? Saludos
Gracias Wolfert! me ahorraste mucho tiempo
Sunil Targe
66
La opción no está disponible en XCode 5.1
Hemang
13

Luché con esto por un tiempo, y en mi caso terminó siendo la Configuración de compilación en Rutas de búsqueda llamada FRAMEWORK_SEARCH_PATHS. Me ayudó que seleccioné el botón "Niveles", que parecía comparar mi proyecto, objetivo y configuración "Resuelto". Vi que mi configuración de destino de alguna manera anuló el valor predeterminado de "$ (heredado)", y el valor anulado fue lo que XCode "resolvió". Cuando eliminé la anulación, que en este caso especificó el 3.2 sdk, los errores del enlazador desaparecieron, al igual que algunas advertencias aparecidas recientemente sobre cualquier clase donde llamé a los métodos posteriores a 4.0.

Acerca de esas advertencias: nunca las vi antes de agregar el marco MessageUI para un cambio reciente. Sospecho, pero no estoy seguro, que cuando agregué ese marco, XCode intentó hacer algo inteligente al agregar esa anulación a mi objetivo. No lo hice explícitamente en ningún momento. Las advertencias fueron, por ejemplo, sobre el método URLByAppendingPathComponent de NSURL, que no apareció hasta sdk 4.0. Antes de agregar el marco de MessageUI, nunca recibí esa advertencia. Y como eliminé la anulación, ya no las obtengo.

tigerswim19
fuente
11

Tuve este problema y la importación lo QuartzCoresolucionó.

jmosesman
fuente
8

Cambiar "Construir arquitecturas activas solamente" a Sí en CordovaLib.xcodeproj -> La configuración de compilación me ayudó. anteriormente la aplicación se estaba ejecutando en el simulador, pero no en el dispositivo.

Nishanth Nair
fuente
7

Es posible que deba actualizar la configuración de compilación.

Verifique la versión de destino de iOS y las arquitecturas del procesador, ya que es posible que no tenga los SDK antiguos con XCode 4.

Puede ver «Falta el SDK» en la configuración de compilación. Cambie eso a lo que corresponda.

Macmade
fuente
Eso es más o menos lo primero que hago cada vez que actualizo xcode. Esta vez no es el problema.
CodeVomit
7

Tuve el mismo problema: simplemente eliminé accidentalmente un archivo .m, mientras que .h estaba en el proyecto. El problema desapareció cuando restauré el archivo .m.

Misha Karpenko
fuente
6

Verifique para asegurarse de que no tiene una ruta de búsqueda de marco específica especificada. si va a la información en el destino y simplemente elimina las entradas de la ruta de búsqueda del marco, debería usar los valores predeterminados para la versión de implementación especificada.

Grady Player
fuente
5

Solo trato de crear un category classarchivo y tengo este problema extraño ... y finalmente ...

Manera incorrecta de crear una clase de categoría que causa el problema:

New File-> Cocoa Touch-> Objective-C class, luego modifiqué el nombre de los archivos a Categoría Clase como nombre .. (es decir , OriginalClass_CategoryName.h/ma OriginalClass+CategoryName.h/m, y también modifiqué el contenido del archivo).

Justo aquí:

New File-> Cocoa Touch-> Objective-C category, y generará automáticamente los archivos ( OriginalClass+CategoryName.h/m).

¡Oh, qué estúpido soy!

Kjuly
fuente
5

Si está utilizando CoreData y utiliza XCode para generar subclases NSManagedObject para sus entidades, asegúrese de generar solo una para cada entidad.

Mi problema fue que generó múltiples subclases de NSManagedObject para la misma entidad (y las colocó en diferentes carpetas).

Simplemente los eliminé y regeneré las subclases NSManagedObject.

Flaviu
fuente
5

Para agregar a la lista de cosas raras que solucionaron este problema ...

Tuve algunas variables constantes CGFloat en un archivo de encabezado global así

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

En el momento en que los quité, todo estuvo bien :)

Sherlock
fuente
1
Mi problema extraño fue en el archivo .pch o constants.h. He declarado una constante como NSString * const kInitiaNotification = @ "kInitialNotification"; sin mencionar la "estática" al principio
Mazen Kasser
Tenía el tema justo después pasé de NSString static *key = @"someKey"aconst NSString *key = @"someKey"
TonyTony
5

Tuve exactamente el mismo problema solo porque tenía dos constantes iguales en diferentes clases. También puede tener este problema si importa un archivo .m, no un archivo .h

Adela Toderici
fuente
¡Me salvas el día!
teck wei
@teckwei puede presionar la flecha hacia arriba: D
Adela Toderici
4

Tuve el mismo problema y lo resolví. En mi caso, la configuración de "arquitecturas" causó el problema. En mi archivo de proyecto, pestaña Configuración de compilación, las arquitecturas se configuraron en armv6. Lo cambié a Estándar (armv7), limpio y compilado. Entonces funcionó!

Kim Jin
fuente
4

En mi caso, el problema era tener diferentes arquitecturas especificadas bajo diferentes objetivos. Estaba creando mi objetivo de aplicación con armv6, armv7 y cocos2d con Standard (amrv7). Vaya a la configuración de construcción y asegúrese de que sus arquitecturas estén de acuerdo con todos los objetivos.

ChrisP
fuente
4

¡Resolví este problema demasiado raro!

Vaya a Destino > Fases de construcción > Enlace binario con bibliotecas :

¡Elimine todos sus marcos y agréguelos nuevamente!

Espero que funcione para ti !

Rudi
fuente
solución bastante horrible
SleepsOnNewspapers
No puede ser respuesta ... no es muy lógico
LKM
Revisé el mensaje de error y descubrí que era uno de los marcos, así que eliminé ese marco y lo agregué nuevamente, no todos los marcos, sino solo ese.
Oluwatobi Omotayo
4

Para lenguaje rápido ...

Recibo este error "ld: archivo demasiado pequeño (longitud = 0) ...."

En mi caso, simplemente limpio el proyecto y luego lo reconstruyo.

Pasos:-

1) Ir al proyecto -> Limpiar

2) Ir a Proyecto -> Construir

Espero que esto ayude..

Niks
fuente
Trabajó para mi. Sucedió cuando cambio el dispositivo del iPhone 6 al iPhone 4S.
racl101
A mí también me funcionó. Muchas gracias
Lee
4

Esto hizo un truco para mí:

Ir

1) Productos> limpiar

2) Windows> Proyectos

3) Seleccione su proyecto y haga clic en " Eliminar " Datos derivados

4) Productos> Construir

usuario4886069
fuente
3

Una posibilidad: active "Eliminación de código muerto" en la configuración de compilación de Xcode 4.

Otra posibilidad: puede ser que haya cambiado a usar LLVM para algún marco que anteriormente usaba GCC. Regresar a GCC (o LLVM GCC) puede eliminar esas advertencias.

Enchilada
fuente
3

Definí erróneamente una nueva constante con el mismo nombre que una constante existente en un archivo diferente y me causó este error al usar xCode 4.3.1. xCode no se quejó pero al compilador no le gusta.

moliveira
fuente
3

Pude corregir este error editando "Rutas de búsqueda de la biblioteca"

En primer lugar, surgió porque había movido un par de carpetas, y eso terminó dando a mi configuración de compilación dos rutas de búsqueda diferentes porque se agregan automáticamente a su configuración de compilación cuando vincula una biblioteca / marco, pero no son Siempre eliminado.

Entonces, si mueve una biblioteca / marco vinculado a un directorio diferente y lo vuelve a vincular, deberá editar manualmente la ruta de búsqueda.

Es posible que pueda esquivar esto eliminando la biblioteca / marco antes de moverlo, pero no lo he probado.

Rembrandt Q. Einstein
fuente