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

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


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


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.


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.


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.


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í


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ó.



24

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

pod deintegrate

pod install

¡Problema resuelto!


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.


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


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.



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.


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.


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.


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.


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!


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.


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


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


¡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ó!


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.


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 !


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


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


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.


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.