Forzar la inclusión de ficheros objeto de la biblioteca estáticos que no se exporta ningún símbolos (GCC / iPhone)

StackOverflow https://stackoverflow.com/questions/1450748

Pregunta

Estoy creando una biblioteca estática para su uso en aplicaciones para el iPhone. Contiene una serie de archivos de origen que exportan no hay símbolos, lo único que hacen es crear una instancia de una instancia estática de una clase que luego se ejecuta un cierto código en su constructor que registra varias cosas con una clase gestor central en otro lugar. Todo esto funciona bien cuando el código está construido como parte de una aplicación de iPhone estándar, pero cuando se separa en una biblioteca estática estos archivos no lo hacen en el binario de la aplicación final y por lo que los constructores de las instancias de clases particulares que contienen Don 't conseguir plazo, y esto causa problemas. He apagado todas las opciones de compilación que ver con la extracción muertos y así sucesivamente, tanto para la construcción de la biblioteca estática y la acumulación aplicación final.

Me encontré con este problema en el compilador Metrowerks hace un tiempo, sin embargo, en esa instancia que estaba ocurriendo incluso cuando el código fue construido en una sola aplicación sin ningún tipo de bibliotecas intermedios. La solución era bastante sencillo: sólo tiene que utilizar __declspec(force_export) en las instancias de clases privadas y todo está bien

.

¿Hay algún equivalente para GCC / iPhone? Estoy usando Xcode 3.1.4 con GCC 4.2 y orientación al iPhone OS 3.1. Alternativamente hay alguna manera de decirle a la aplicación de vincular en cada archivo de objeto en la biblioteca estática, independientemente de si o no se hace referencia explícita? He confirmado usando ar que el conjunto completo de archivos de objetos llegan a ingresar a la biblioteca estática.

Gracias de antemano.

¿Fue útil?

Solución

Creo que la opción que está buscando es -all_load:

   -all_load
       Loads all members of static archive libraries.  See man ld(1) for
       more information.

Otros consejos

-all_load tiene algunos problemas si le sucede a vincular muchas bibliotecas y / o marcos (Mac OS X). En este caso sólo se debe obligar a todos los símbolos de una biblioteca específica mediante -force_load:

g++ test.cpp -o test -force_load libtoload.a
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top