Por que o gcc não fornece implicitamente o sinalizador -fPIC ao compilar bibliotecas estáticas no x86_64

Eu tive vários problemas ao compilar objetos compartilhados vinculados estaticamente a bibliotecas estáticas. Esse problema aparece apenas nas plataformas x84_64. Ao fazer o mesmo trabalho de compilação no x86_32, não tenho problemas.

Talvez isso seja uma configuração específica do sistema operacional do GCC, mas minha pesquisa indica que é assim que o GCC funciona nas plataformas x86_64. De qualquer forma, estou usando o gcc 4.4.3 no Ubuntu 10.04 x86_64.

Como o problema foi resolvido? ... Certificando-se de que todas as dependências da biblioteca estática sejam compiladas com -fPIC.

Questão 1: Qual é a diferença entre -fpic e -fPIC (aparentemente -fPIC gera mais instruções no x86)? Por que o tipo posterior é mais relevante no contexto x86_64?

Questão 2: Minha suposição é que, quando você vincula um código estático, está conectando as funções no seu binário no momento do link, por que ele precisa do nível de indireção que o mecanismo de "código independente de posição" fornece?

Questão 3: Agora, se o x86 não precisa de -fpic / -fPIC para vincular objetos compartilhados a arquivos estáticos, por que é necessário no x86_64?

Pergunta 4: mesmo que seja necessário, por que não é fornecido implicitamente? Eu achava que quebrar mudanças deveria ser um grande não-não

questionAnswers(1)

yourAnswerToTheQuestion