Recientemente descargué Xcode 7 beta, y Xcode se queja de que algunas de mis bibliotecas C no se compilan en BitCode. ¿Cómo haría para decirle a Clang que produzca BitCode que sea compatible con iOS? He visto respuestas similares en stackoverflow, pero no sé si se aplican a la producción de bibliotecas BitCode para iOS.
Editar:
Estoy usando la configuración correcta, -fembed-bitcode, pero cuando intento archivar, aparece el error: ld: advertencia: ignorar el archivo XXXX/XXXX, el archivo se creó para el archivo que no es la arquitectura que se vincula (arm64). Cuando uso -fembed-bitcode-marker, puedo archivar, pero aparece el error: no se pudo generar el paquete de código de bits completo porque XX/XX se creó solo con el marcador de código de bits. La biblioteca debe generarse a partir de la compilación del archivo Xcode con bitcode habilitado.
¿Alguna idea sobre lo que está yendo mal? La biblioteca se está compilando correctamente, pero no me permite archivar. Creé una función de agregar simple y la convertí en una biblioteca, y obtengo los mismos síntomas, por lo que no es la biblioteca que estoy compilando.
Edición 2: debe compilar las versiones arm64 y armv7 usando bitcode y lipo juntos. El uso de código de bits no elimina la necesidad de una gran biblioteca al archivar. fuente : Enlace
¿entonces compilas estas bibliotecas C tú mismo?
– usuario102008
5 de julio de 2015 a las 21:26
Sí, preguntando específicamente sobre gmp. Pero, en general, estoy preguntando, ¿cómo logramos hacer sonar para producir BitCode que funcione con iOS? Sé que hay una opción para hacer que el sonido metálico se detenga en la representación intermedia (IR), pero no sé si esto funcionará con todo el BitCode que Apple está mencionando ahora.
– stack_tom
6 de julio de 2015 a las 4:07
Danoli3
Al crear bibliotecas estáticas, debe agregar lo siguiente para la generación de códigos de bits:
-fembed-bitcode
para una biblioteca dinámica, necesita vincularse adicionalmente con
-fembed-bitcode
Nota: este comando solo está disponible con Xcode7+
Con respecto a la respuesta aceptada de usar -fembed-bitcode-marker
Debe tener en cuenta que una compilación normal con la opción -fembed-bitcode-marker producirá secciones de código de bits incrustadas de tamaño mínimo sin ningún contenido real. Esto se hace como una forma de probar los aspectos relacionados con el código de bits de su compilación sin ralentizar el proceso de compilación. El contenido de código de bits real se incluye cuando realiza una compilación de archivo.
-fembed-bitcode-marker simplemente marca dónde estaría el código de bits en el binario después de la compilación de un archivo.
-fembed-bitcode en realidad hace la generación e incrustación completa del código de bits, por lo que esto es lo que necesita usar para crear bibliotecas estáticas.
Xcode en sí se construye con -fembed-bitcode-marker para compilaciones regulares (como implementar en el simulador)
Xcode solo compila con -fembed-bitcode para compilaciones de archivo / compilaciones de producción (ya que esto solo es necesario para Apple).
Gracias por el truco de compilación xcode-select, que es muy útil y no lo sabía. Entonces, si uso -fembed-bitcode, ¿funcionarán las bibliotecas producidas en el simulador? Actualmente tengo que usar las bibliotecas -fembed-bitcode-marker cuando implemento en el dispositivo, pero tengo que usar mis bibliotecas fat compiladas previamente cuando ejecuto en el simulador, de lo contrario recibo errores del enlazador. Además, si uso -fembed-bitcode-marker, ¿Xcode crea las versiones de código de bits de la biblioteca cuando se implementa en el dispositivo, ya que ya no recibo advertencias?
– stack_tom
10 de julio de 2015 a las 22:08
Bien, he construido usando ese comando. Sin embargo, tengo los mismos síntomas que antes: las bibliotecas gruesas se ejecutan en el simulador, pero las de código de bits fembed no. Además, no puedo archivar. Xcode dice “ld: advertencia: ignorando el archivo X, el archivo se creó para el archivo que no es la arquitectura que se vincula (arm64)”. Cuando uso la biblioteca -fembed-bitcode-marker, me permite archivar, sin embargo, nuevamente recibo las advertencias de código de bits como dijiste (ya que en realidad no es un código de bits). ¿Por qué no puedo archivar con -fembed-bitcode solo entonces? Incluso dice que fue creado para archivar.
– stack_tom
10 de julio de 2015 a las 22:44
tengo el mismo problema y he probado lo mismo :/
– Prateek
10/10/2015 a las 19:31
¿Dónde tengo que insertar esa línea, por favor dígame?
– Mahesh Narla
24 de febrero de 2017 a las 7:32
Gautam Jain
ir a la Configuración de compilación. Buscar “banderas de compilador personalizadas“.
Agregar -fembed-bitcode para Otras banderas C. Esto asegurará que la lib se construya con compatibilidad de código de bits en el momento de la compilación. Hice esto para iOS de 64 bits y 32 bits, y los fusioné en uno. Funciona de maravilla.
Como ustedes tuvieron consultas, aquí hay una captura de pantalla de la configuración: La configuración es la misma para el objetivo del proyecto y el objetivo del SDK.
Bitcode lib no funcionará con Xcode 6.
¿Puede compartir el guión para hacer 64 bits, 32 bits y para el simulador y luego unirlos en uno?
– Satyam
8 oct 2015 a las 14:38
lipo -create -salida “destino” “fuente1” “fuente2” “fuente 3”. Aquí la fuente 1 es su ruta a la biblioteca del simulador de 32 bits, la “fuente 2” es la ruta a la biblioteca del simulador de 64 bits y la “fuente 3” es la ruta a la “lib del dispositivo iOS”. Esto se hace desde la terminal. Puede verificar los detalles finales de la biblioteca con este comando lipo -info “ruta a la biblioteca final”
– Gautama Jain
8 oct 2015 a las 15:06
Gracias, quiero el comando de compilación para crear archivos lib de 32 bits y 64 bits
– Satyam
8 oct 2015 a las 15:27
@GautamJain, estoy usando XCode7.0.1 y agregué Otras banderas C con -fembed-bitcode, Enable Bitcode=YES en la configuración de compilación de destino y luego ejecuté el comando lipo en el dispositivo y las compilaciones del simulador. Además, estoy usando un script de shell para hacer que el dispositivo y el simulador se construyan con las opciones ENABLE_BITCODE=YES y OTHER_CFLAGS=”-fembed-bitcode”. Sin embargo, parece que no tengo suerte con la biblioteca de grasa. El código de bits se elimina de la biblioteca fat y no puedo archivar mi aplicación cuando configuro Habilitar código de bits = SÍ en la configuración de compilación de destino de la aplicación. Estoy confundido por qué lipo elimina las banderas de código de bits.
-Deepak Badiger
13/10/2015 a las 14:10
“El código de bits se eliminó de la biblioteca de grasa” También estoy viendo esto. Estoy tratando de convencerme de que este es el comportamiento esperado…
– jmoody
23/11/2015 a las 20:00
Si aún tiene problemas después de agregar el -fembed-bitcode a las banderas de Otros C, busque “Habilitar código de bits” en “Opciones de compilación” y configúrelo en No. Esto le permitirá archivar correctamente.
¡Usted, señor, es un salvavidas! ¡Gracias!
– Tash Pemhiwa
1 de marzo de 2017 a las 18:59
Zeeshan
Lo que necesita es -fembed-bitcode. Cuando ENABLE_BITCODE está habilitado, Xcode compila con -fembed-bitcode-marker para compilaciones regulares y con -fembed-bitcode para compilaciones de archivo. Una opción simplemente “marca” dónde estaría el código de bits en el binario después de la compilación de un archivo y hace cumplir las nuevas reglas del código de bits, mientras que la otra en realidad realiza la generación completa del código de bits, que probablemente sea más lenta y, por lo tanto, no esté habilitada en todo tipo de compilación. .
La guía de Syo Ikeda para manejar BITCODE también podría ayudarlo:
Si está creando una biblioteca estática y le gustaría habilitar el código de bits, solo (1) ENABLE_BITCODE = YES puede no ser suficiente.
(2) También con el ajuste -fembed-bitcode el siguiente error seguía apareciendo para varios archivos cuando se construía en Teamcity
bitcode bundle could not be generated because ‘/path/fileInYourStaticLib.a(fileInYourStaticLib.o)’ was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64
Algunos consejos/cosas a tener en cuenta que me ayudaron a resolver el problema en última instancia, además de los pasos anteriores (1) y (2)
Asegúrese de establecer la variable ‘Otras banderas C’ en “-fembed-bitcode” en el ‘PROYECTO’ y todos los ‘OBJETIVOS’.
Si hay varios proyectos para los que está intentando crear una biblioteca estática, asegúrese de que todos los proyectos tengan "-fembed-bitcode" activado.
On Build Settings, click on the + sign at the top to add a user-defined build setting with the nameBITCODE_GENERATION_MODE, and set Debug tomarcador, Release tocódigo de bits
Si los pasos anteriores no funcionan, también puede probar esta opción. On Build Settings -> Other C flags, set Debug to-fembed-bitcode-marcador, and Release to-fembed-código de bits
Además, cada vez que realice los cambios anteriores, intente eliminar DerivedData, limpie el proyecto XCode y, posiblemente, cierre y reinicie XCode.
genial, ya no es tan sencillo como establecer una bandera desafortunadamente 🙂
– Naishta
11 de mayo de 2017 a las 4:54
Adán B.
Solo para agregar algunos detalles para futuros novatos como yo.
Me encontré con este problema con libVivoxNative.a cuando compilé desde Unity a iOS. Tuve que deshabilitar el código de bits en 4 lugares diferentes:
Originalmente, supongo que lo había configurado para el Unity-iPhone de destino, no para el proyecto o las pruebas/UnityFramework. Cambiar la configuración para los 4 funcionó.
genial, ya no es tan sencillo como establecer una bandera desafortunadamente 🙂
– Naishta
11 de mayo de 2017 a las 4:54
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información
¿entonces compilas estas bibliotecas C tú mismo?
– usuario102008
5 de julio de 2015 a las 21:26
Sí, preguntando específicamente sobre gmp. Pero, en general, estoy preguntando, ¿cómo logramos hacer sonar para producir BitCode que funcione con iOS? Sé que hay una opción para hacer que el sonido metálico se detenga en la representación intermedia (IR), pero no sé si esto funcionará con todo el BitCode que Apple está mencionando ahora.
– stack_tom
6 de julio de 2015 a las 4:07