2012-08-06 16 views
21

Tengo una biblioteca que comenzó a lanzar un par de advertencias del enlazador en XCode 4.4. Las advertencias están en la línea de "ld: advertencia: método de instancia 'methodName:' en la categoría del método anula de clase en"suprimir el método de instancia anular el marco de advertencia del enlazador xcode

El marco funciona bien, y supongo que la compañía que lo escribió corregirá esto en el próximo lanzamiento, pero por el momento estas advertencias son muy molestas. ¿Hay alguna forma de desactivarlos sin deshabilitar todas las advertencias del enlazador?

+0

¿Qué significa la advertencia? – trojanfoe

+0

Creo que significa que las personas que hicieron la biblioteca incorrectamente subclasificaron algunas cosas. No parece romper nada, pero el enlazador es un pequeño relincho, lo cual es molesto ya que no puedo solucionarlo porque es una fuente cerrada. – ima747

+0

¿Creaste/nombraste un método en tu clase, igual que otro método en la otra clase? – Hexark

Respuesta

13

Hay dos opciones que he llegado con banderas añadiendo a "Otras banderas conector" en el Xc oda acumulación área de configuración:

1) Adición de -Xlinker -w suprimirá todas las advertencias enlazador, sin importar el tipo (esto es la bandera -w a ld (1)). Obviamente eso silenciará esta advertencia particular, pero también todas las otras advertencias ld.

2) Agregar -Xlinker -no_objc_category_merging omitirá el paso de optimización en el que el vinculador combina todos los métodos de categoría en la clase base durante el enlace, lo que ocurriría entonces en tiempo de ejecución. Un poco más lento en el arranque, probablemente, pero probablemente aún sea más rápido que el método en el tiempo de ejecución, y dado que es durante este paso que ld (1) emite la advertencia, se saltará eso también.

Parece que ld no tiene una forma de suprimir quirúrgicamente cualquier advertencia individual de la forma en que lo hace el compilador, aunque tiene indicadores especiales para algunos de ellos o grupos de ellos (ninguno de los cuales ayuda con este). Probablemente ninguna de las soluciones anteriores se recomiende para el código de producción, pero en algunas situaciones, una u otra podrían ser útiles.

+0

gracias. Salvaste mi día – larva

1

Si una opción para ocultar esa advertencia existe sería bajo:

Navegador de proyectos (la lista de archivos de la izquierda) -> [nombre del proyecto] (el uno con el icono azul) -> Configuración de creación -> Apple compilador LLVM 3.1 - Advertencias

también:

In Xcode, how to suppress all warnings in specific source files?

+2

Gracias por esto. No hay advertencias en las secciones del compilador que son específicas de las bibliotecas o las advertencias particulares que estoy viendo. Podría apagar todas las advertencias, pero eso es expresamente lo que estoy tratando de evitar. La otra publicación a la que se hace referencia también es para los archivos que se compilarán, pero las bibliotecas y los encabezados no se muestran allí, por lo que no hay forma de establecerlos específicamente. Tengo que asumir que no hay forma de desactivar la advertencia en xcode ya que es de la biblioteca. – ima747

+0

Este es un mal consejo. Creo que hay muchas advertencias clang que no tienen casillas de verificación en la interfaz de usuario de configuraciones de compilación. En general, establecer una opción específica '-W' en el archivo solucionará este problema durante la compilación. Establezca la opción '-fdiagnostics-show-option' en un archivo y clang le dirá qué' -W' usar. En este caso particular, esto no funcionará, porque la pregunta de OP es acerca de ** linker **, no del compilador. – paulmelnikow

+0

Otra solución, una vez más para el compilador y no para el enlazador, es pragmas de diagnóstico: http://clang.llvm.org/docs/UsersManual.html # controlling-diagnostics-via-pragmas – paulmelnikow

Cuestiones relacionadas