xcode con impulso: enlazador (Id) Advertencia sobre la configuración de visibilidad

3 minutos de lectura

xcode con impulso: enlazador (Id) Advertencia sobre la configuración de visibilidad
Gob00st

He estado usando un marco de refuerzo del siguiente enlace para mi proyecto iPhone Xcode:
https://goodliffe.blogspot.com/2010/09/building-boost-framework-para-ios-iphone.html

funciona bien, pero siempre recibo cientos de advertencias de Apple Mach-O Linker (id) como:

El acceso directo en __ZN5boost15program_options6detail7cmdline24handle_additional_parserERSt6vectorISsSaISsEE al símbolo débil global __ZTVN5boost17bad_function_callE significa que el símbolo débil no se puede anular en tiempo de ejecución. Esto probablemente se debió a que se compilaron diferentes unidades de traducción con diferentes configuraciones de visibilidad.

¿Cómo deshacerse de esas advertencias en el código?

editado: por conjunto Símbolos ocultos por defecto = SÍ, logré deshacerme de la mayoría de las advertencias pero quedan 3 más que no desaparecerán, ¿alguien puede decirme por qué?

editado nuevamente: ¡Después de una reconstrucción, las 3 advertencias restantes también desaparecieron! ¡Así que mi solución funcionó!

Si varios proyectos incluyen impulso, cada proyecto debe tener los mismos valores para

 Symbols Hidden by Default
 Inline Methods Hidden

  • La segunda vez que llegué a esta respuesta y me ayudó a corregir la advertencia. No tengo idea de cómo el proyecto podría haber terminado con “Métodos en línea ocultos” desincronizados OTRA VEZ. ¿Las actualizaciones de Xcode lo cambiaron? Puaj..

    – Tomás André

    23 oct.

  • +1 Sí, a diferencia de la respuesta que sugiere solo Symbols Hidden by Default necesitaba coincidir, encontré que Inline Methods Hidden además necesario para hacer coincidir.

    – oso hormiguero

    03 nov.


Doe acaba de descubrir cómo deshacerse de cientos de advertencias como esta: configurar para un objetivo o proyecto completo con el Símbolos ocultos por defecto configuración de compilación para

  • Era yes el problema o la solución? 🙂

    – Sarnold

    30 dic. 11 a las 23:45

  • establecer en sí arreglará las advertencias

    – Gob00st

    31 dic. 11 a las 1:10

  • Qué incómodo. Para mí, establecer Símbolos ocultos por defecto en No, eliminó advertencias similares provenientes de la vinculación con una biblioteca usando Eigen.

    –Alec Jacobson

    13 abr.

  • No importa de qué manera configuro “Símbolos ocultos por defecto” (SÍ o NO), las advertencias del compilador boost aún persisten. Estoy usando el compilador LLVM en XCode 4.4 en un proyecto iOS habilitado para ARC. Sigo buscando una solución…

    – alegría de vivir

    04 ago.

El enlazador se queja de las diferentes configuraciones de visibilidad entre su proyecto y Boost.

También puede solucionar ese problema volviendo a compilar Boost con la misma configuración de compatibilidad.

Solo agrega

cxxflags=-fvisibility=hidden

y

cxxflags=-fvisibility-inlines-hidden

al bjam línea de comando.

  • -fvisibility=hidden implica -fvisibility-inlines-hidden. Solo lo primero es necesario.

    – johnwbyrd

    19 sep.


Si varios proyectos incluyen impulso, cada proyecto debe tener los mismos valores para

Símbolos ocultos por métodos en línea predeterminados ocultos

nerith dijo que tiene razón, pero en Xcode 4.6.3, no son los “Símbolos ocultos de forma predeterminada” y los “Métodos en línea ocultos” anteriores, y configuré gcc_symbols_private_extern en sí, la advertencia desaparece.

Ajuste Símbolos ocultos por defecto a NO y Métodos en línea ocultos a NO funcionó para mí. No es necesario agregar ninguna bandera a Otras banderas de C++

xcode con impulso: enlazador (Id) Advertencia sobre la configuración de visibilidad
OLL

Yo también tuve este problema.

Resulta que estaba haciendo algo como esto por descuido:

#pragma GCC visibility push(default)
#include <SomeExternalLibrary.h>
void myExampleSymbol();
#pragma GCC visibility pop

Lo cual resolví cambiando a:

#include <SomeExternalLibrary.h>
#pragma GCC visibility push(default)
void myExampleSymbol();
#pragma GCC visibility pop

.

¿Ha sido útil esta solución?