Tengo un proyecto en Xcode 4 (la última no la versión beta de la que se construye bien cuando se construyó en Xcode sí mismo. Específicamente, el Ld comando utiliza correctamente los datos derivados de directorio (donde la construcción de los productos, incluyendo un dependiente de la biblioteca estática, se colocan).

Sin embargo, cuando voy a construir en el mismo proyecto desde la línea de comandos, el comando Ld falla, como se está intentando utilizar el /crear carpeta dentro del proyecto, que no se va a rellenar.

He intentado ajustar cada generación configuración sé, tanto en el padre y el proyecto dependiente.

Alguna idea sobre dónde iniciar la depuración de esto? Me puede dar más información como sea necesario.

Edit 1: Completo Xcode construir comando:

xcodebuild -project AppName.xcodeproj -target AppName -configuration "Config Name"

Donde AppName y Config Name son los valores correctos para la construcción.

Edit 2: Enlace (Ld) de los comandos.

Cuando fue construida en Xcode (esto funciona):

Ld /Users/james/Library/Developer/Xcode/DerivedData/AppName-apkmkuhwuccsbpblulxcsafyxkwa/Build/Products/Debug-iphonesimulator/AppName.app/AppName normal i386
cd /Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName
setenv MACOSX_DEPLOYMENT_TARGET 10.6
setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin"
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2 -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk -L/Users/james/Library/Developer/Xcode/DerivedData/AppName-apkmkuhwuccsbpblulxcsafyxkwa/Build/Products/Debug-iphonesimulator -L/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName -F/Users/james/Library/Developer/Xcode/DerivedData/AppName-apkmkuhwuccsbpblulxcsafyxkwa/Build/Products/Debug-iphonesimulator -filelist /Users/james/Library/Developer/Xcode/DerivedData/AppName-apkmkuhwuccsbpblulxcsafyxkwa/Build/Intermediates/AppName.build/Debug-iphonesimulator/AppName.build/Objects-normal/i386/AppName.LinkFileList -mmacosx-version-min=10.6 -lxml2 -all_load -ObjC -licucore -Xlinker -objc_abi_version -Xlinker 2 -lMyClientLibrary -lxml2 -lsqlite3.0 -framework Security -framework MessageUI -framework QuartzCore -framework MediaPlayer -framework MapKit -framework CoreLocation -framework AudioToolbox -lz.1.2.3 -framework MobileCoreServices -framework SystemConfiguration -framework CFNetwork -framework UIKit -framework Foundation -framework CoreGraphics -o /Users/james/Library/Developer/Xcode/DerivedData/AppName-apkmkuhwuccsbpblulxcsafyxkwa/Build/Products/Debug-iphonesimulator/AppName.app/AppName

Cuando se construyó desde la línea de comandos usando el comando build de arriba (esto falla):

Ld "build/AppName.build/Prod Ad Hoc-iphoneos/AppName.build/Objects-normal/armv6/AppName" normal armv6
cd /Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName
setenv IPHONEOS_DEPLOYMENT_TARGET 4.0
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin:/opt/local/bin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk "-L/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName/build/Prod Ad Hoc-iphoneos" -L/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName "-F/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName/build/Prod Ad Hoc-iphoneos" -filelist "/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName/build/AppName.build/Prod Ad Hoc-iphoneos/AppName.build/Objects-normal/armv6/AppName.LinkFileList" -dead_strip -lxml2 -all_load -ObjC -licucore -miphoneos-version-min=4.0 -lMyClientLibrary -lxml2 -lsqlite3.0 -framework Security -framework MessageUI -framework QuartzCore -framework MediaPlayer -framework MapKit -framework CoreLocation -framework AudioToolbox -lz.1.2.3 -framework MobileCoreServices -framework SystemConfiguration -framework CFNetwork -framework UIKit -framework Foundation -framework CoreGraphics -o "/Users/james/Code/ClientName-Depot/NameOfProject/trunk/AppName/build/AppName.build/Prod Ad Hoc-iphoneos/AppName.build/Objects-normal/armv6/AppName"

Que devuelve:

ld: library not found for -lMyClientLibrary
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
  • Comience por dar a su completa xcodebuild comando
  • Hecho, así como el enlazador de comandos. No estoy seguro si el «problema» es que uno construye utiliza el directorio de compilación, mientras que el otro utiliza la derivada de directorio de datos, o que la .una de la biblioteca de cliente no se copian en el lugar correcto.
  • No tengo una respuesta para esto. Podría ser un error, pero uno pensaría que habría sido encontrado rápidamente. Le han pedido en el Apple Xcode-lista de usuarios?
InformationsquelleAutor James J | 2011-07-11

10 Comentarios

  1. 42

    Ok, así que casi 6 (facturable) horas más tarde, me he metido en el trabajo correctamente en Xcode y en la línea de comandos (y en el servidor de compilación, el punto de este ejercicio).

    A lo largo de la manera en que yo podría solucionar uno de los problemas para provocar otro – me gustaría aparentemente solucionar el vinculador/Ld problema, sólo para causar problemas en la compilación («SomeClass no declarado (primer uso en esta función)» o «SomeHeader.h: No existe el fichero o directorio» errores comunes).

    Fue uno de esos momentos en que me ajustar casi todos los ajustes que pude encontrar, así que es difícil decir qué es exactamente lo malo y qué es exactamente lo corrigió.

    Cosas creo podría han ayudado son como sigue:

    • Convertido construir utilizar un Xcode espacio de trabajo & esquema (en lugar de project & destino)
    • Reorganizado área de trabajo para la Aplicación del proyecto y la biblioteca estática como hermanos (no como padre/hijo)
    • Cambiado Xcode y configuración del área de trabajo uso de crear lugares especificados en los objetivos de
    • Cambio de la construcción de los Productos de Ruta de acceso de la Aplicación y de la Biblioteca de utilizar ../build (tanto archivos de proyecto contenida en el hermano subcarpetas de un directorio principal, por lo que tener a construir en la misma carpeta resuelto el original de vinculador/Ld problema de comando, me pensar)
    • Editado el esquema de Aplicación para crear de forma explícita la Biblioteca de destino, y hacerlo antes de la Aplicación de destino
    • En la construcción de las Fases para la Aplicación de destino, agregar explícitamente la Biblioteca en «Vínculo Binario Con las Bibliotecas»
    • Cambiar el tipo de ubicación de la Biblioteca .una referencia de archivo «en Relación a la construcción de los Productos»
    • Añadido un «Copiar los Encabezados de la» fase de construcción para el proyecto de la Biblioteca, se añaden las cabeceras correspondientes a la sección Pública
    • Cambiado el Público de los Encabezados de la Ruta de la Carpeta de la Biblioteca de proyecto a «/include»
    • Cambiado el Directorio de Instalación de la Biblioteca para $(BUILT_PRODUCTS_DIR)
    • Cambiado la Biblioteca de Rutas de Búsqueda y el Encabezado de Usuario Rutas de Búsqueda de la Aplicación de destino para $(BUILT_PRODUCTS_DIR) (recursivo)
    • Añadido un comando Limpiar antes de la compilación en mi Jenkins servidor de generación de
    • Añadido explícita SDK y el Arco de argumentos para el comando de generación de
    • Quita los espacios de construir el nombre de la configuración

    Final de comandos de generación se parece a esto:

    xcodebuild -workspace ClientName.xcworkspace -scheme AppName -configuration "ProdAdHoc" -sdk iphoneos -arch "armv6 armv7"

    Algunos recursos útiles que he usado, mientras que la depuración de este problema:

    De todos modos, espero que haya salpicado suficientes palabras claves sobre las que nadie que tenga algún parecido a construir problemas en el futuro se topa con esto y lo encuentra útil. No tengo ni idea de cómo un flujo de trabajo lo hice muchas veces en Xcode 3.x estaba tan jodido cuando me mudé a Xcode 4, aquí está la esperanza de que Apple es capaz de limpiar esto en futuras versiones.

    Esta fue una gran experiencia de aprendizaje para mí, y va a través de todo esto, parece que aclarar las cuestiones con autocompletar yo estaba teniendo de antemano. He de decir que las cosas podrían haber sido mucho peor; yo todavía podría estar en desarrollo para SharePoint.

    • Para referencia en el futuro, asegurándose de que los esquemas de derecho fueron compartidos, y la conmutación de la xcodebuild herramienta de línea de comandos para el uso de espacios de trabajo y esquemas trabajó para mí.
    • Gracias a la facturable cliente así.
    • Confirmado. El uso de -scheme X en lugar de -project Y -target Z trabajó para mí. (No tuve que crear los nuevos esquemas.)
    • Estoy usando el esquema, pero estoy recibiendo este error «Ld /Users/confiz/Library/Developer/Xcode/DerivedData/CloudMessage-afevkkqtjcnmoddycvosdhbgoraa/Build/Intermediates/ArchiveIntermediates/LTDMessaging/IntermediateBuildFilesPath/CloudMessage.build/Release-iphoneos/LTDMessaging.build/Objects-normal/arm64/LTD\ Mensajería normal arm64» he limpiado conducido datos y han hecho todo lo que se le preguntó por encima pero no funcionó.
  2. 10

    Me encontré con el mismo problema de ayer y fue capaz de resolverlo. En un esfuerzo para reducir lo que trabajó para James, voy a señalar lo que tenía que hacer. He tenido que añadir un espacio de trabajo y el interruptor a la ejecución de xcodebuild con espacio de trabajo/esquema en lugar de proyecto/objetivo.

    Usar el espacio/sistema obligó a xcodebuild el uso de la DerivedData carpeta, en lugar de la construcción de la carpeta de salida bajo el proyecto principal. Esto permitió que el enlazador para encontrar el asociado biblioteca estática.

    Este blog fue muy útil:

    http://blog.carbonfive.com/2011/05/04/automated-ad-hoc-builds-using-xcode-4/

    • Este post me señaló en la dirección correcta. Necesita al menos un esquema y se debe especificar en la línea de comandos.
  3. 4

    Tengo este error cuando estaba experimentando con mis archivos puedo añadir el @ejecución, a la .h archivo y la izquierda .m archivo vacío. No creo que este es su error, pero si alguien más se puede comprobar que usted no ha hecho esto.

    • Para mí el problema llegó después de la actualización de Xcode.
  4. 2

    De verificación si no importar el .m archivos en tus archivos de cabecera! Cambiando .m .h fijo, que para mí!

  5. 2

    No sé si esto funcionará para usted, pero en mi caso, yo tenía más de un main.m archivo. Todo lo que tenía que hacer era separar uno de los main.m de la diana y trabajado. Asegúrese de que usted no tiene más de un main.m en su proyecto.

  6. 1

    Si nos fijamos en el registro de la construcción, pidiendo para ver todos los mensajes, usted debe ver a un lacónico línea que dice «enlace …» que tiene poco en el camino de detalles. Sin embargo, si hace clic derecho en la línea y seleccione «expandir todas las transcripciones» se obtiene una muy detallada de la línea de decirle a usted qué comando se emite desde XCode.

    Que debería ayudar a depurar el problema.

    Dave

    • Tomó una mirada en que, editado mi post original con el comando Ld tanto de Xcode y de la línea de comandos construye. Línea de comandos todavía no logra realizar el enlace, aunque.
  7. 1

    Tuve una excepción similar encontrado,
    resulta que tengo un poco (nulo) de referencia en el proyecto.pbxproj
    después de que me limpie los de referencia nula en el proyecto.pbxproj, la línea de comandos construir fue el éxito como el xcode anteriormente hace.
    Echa un vistazo a Xcode 4 proyecto: utilidad para limpiar pbxproj archivo?
    utilidad-para-limpiar-pbxproj-archivo

    para más referencia

  8. 0

    De repente tengo el mismo problema, después de una Limpieza, al principio me entró el pánico, wen vi:

    linker command failed with exit code 1 (use -v to see invocation)

    … pero resultó ser muy fácil de arreglar, no hay línea de comandos necesarios!

    He hecho clic en mi raíz del proyecto (el que está en la parte superior con el modelo icono con Una «a») en el Navegador, luego hacer clic en la sección del PROYECTO (puede hacer clic en la sección orientación) y luego hacer clic en el botón en la parte inferior-medio llamado «Validar Configuración».

    XCode sí validado los archivos de proyecto y me dijo que el problema era un duplicado de la definición de objetivos, y se ofreció a arreglar… y voilá, el problema ha ido!

    Buena suerte!

    • sabes @RacZo respuestas como estas realmente puede utilizar una captura de pantalla
    • Creo que, la pregunta es «la construcción es un error a la hora de construir aplicaciones de línea de comandos’ no desde el XCode aplicación GUI…
  9. 0

    Puedo resolver el problema por ir a la «ruta de búsqueda de Biblioteca», y asegúrese de que todas las entradas son correctas.

  10. 0

    Personalmente, he tenido este problema cuando estaba desarrollando un static library. Tuve la static library de destino con todo el código de la producción, y un patrón de prueba que sacó en el MyStaticLib.a archivo como un marco.

    Pruebas corrió muy bien en Xcode, pero no en el terminal usando xcodebuild. El problema terminó siendo que el static library objetivo fue la compilación para Standard architectures, mientras que la prueba de destino quería compilar para Standard architectures (including 64-bit). La conmutación de la prueba objetivo de Standard architectures arreglado todo.

Dejar respuesta

Please enter your comment!
Please enter your name here