¿Por qué gcc no proporciona implícitamente el indicador -fPIC al compilar bibliotecas estáticas en x86_64?
He tenido numerosos problemas al compilar objetos compartidos que enlazan estáticamente con bibliotecas estáticas. Este problema solo aparece en plataformas x84_64. Al hacer el mismo trabajo de compilación en x86_32 no tengo ningún problema.
Quizás esto es una configuración de GCC específica del sistema operativo, pero mi investigación indica que es cómo funciona GCC en plataformas x86_64. De todos modos, estoy usando gcc 4.4.3 en Ubuntu 10.04 x86_64.
¿Cómo se soluciona el problema? ... Asegurándose de que todas las dependencias de la biblioteca estática estén compiladas con -fPIC.
Pregunta 1: ¿Cuál es la diferencia entre -fpic y -fPIC (aparentemente -fPIC genera más instrucciones en x86)? ¿Por qué el tipo posterior es más relevante en el contexto x86_64?
Pregunta 2: Mi suposición es que cuando se vincula con el código estático está conectando las funciones a su binario al momento del enlace, ¿por qué necesita el nivel de indirección que proporciona la maquinaria de "código independiente de posición"?
Pregunta 3: Ahora, si x86 no necesita -fpic / -fPIC para vincular objetos compartidos con archivos estáticos, ¿por qué se necesita en x86_64?
Pregunta 4: incluso si es necesario, ¿por qué no se suministra implícitamente? Pensé que romper los cambios se suponía que era un gran no-no