Al menos en Linux y Solaris, las bibliotecas estáticas son en realidad un montón de .o's compilados arrojados a un gran archivo. Al compilar una biblioteca estática, generalmente se omite el indicador -fpic, por lo que el código generado depende de la posición.Vinculación de una biblioteca compartida con una biblioteca estática: ¿la biblioteca estática debe compilarse de forma diferente que si una aplicación estuviera vinculándola?
Ahora diga que mi biblioteca estática es B. Lo he construido y tengo el archivo resultante .a que en realidad es solo un glob de todos los archivos .o dependientes de la posición. Ahora tengo una biblioteca compartida que me gustaría construir, A, y quiero que enlace estáticamente B. Cuando construyo A, usaré el indicador -fpic para hacer que la posición del código generado sea independiente. Pero si hago un enlace contra B, ¿no estoy mezclando los archivos de objeto dependientes de la posición y la posición independiente?
Recibo muchos errores de reubicación de texto a menos que también especifique -mimpure-text, y creo que esta puede ser la causa. Parece que cuando compilo una biblioteca, realmente necesito compilarla veces, una versión compartida, una versión estática y una versión estática que se puede usar por compartido. ¿Estoy en lo cierto? Podría seguir usando -mimpure-text pero la página de manual de g ++ dice que si haces eso, el objeto en realidad no termina siendo compartido (no está claro si todo está sin compartir o solo las partes estáticamente vinculadas, ¿alguien lo sabe?) .
La pregunta se expresa correctamente, él 'omite' '-fpic' en el primer párrafo, lo que lleva al código dependiente de la posición, luego lo usa en el segundo párrafo, lo que lleva al código de posición independiente. –