Ajuda com o falhador do vinculador: .gnu.linkonce.t
-
11-09-2019 - |
Pergunta
Estou tendo problemas para vincular uma biblioteca compartilhada usando o GCC 3.2.3 com o Binutils 2.18. Quando tento vincular a biblioteca, recebo o seguinte erro:
.gnu.linkonce.t _... referenciado na seção .rodata: definido na seção descartada .gnu.linkonce.t ...
Eu fiz uma quantidade razoável de pesquisas sobre isso e a maioria dos lugares parece indicar que é uma regressão introduzida no Binutils 2.17 e posteriormente fixada em 2.18.50, mas fiquei curioso se alguém soubesse se havia alguma solução alternativa para o problema sem tendo que tocar em Binutils e GCC.
Obrigado.
Solução
Acabou sendo um resultado estranho em que o sistema estava incompatível com um GCC com um binutils diferentes. /usr/bin/gcc estava sendo usado (3.2.3) e/usr/local/bin/ld estava sendo usado com ele devido a/usr/local/bin em frente a/usr/bin no caminho. Quando trocamos para que/usr/bin estivesse na frente do caminho, o apropriado/usr/bin/ld foi chamado (Binutils 2.14) e isso parece ter resolvido o problema.
Outras dicas
Este bug foi encontrado e foi relatado aqui GCC Bugzilla, um pequeno teste que se concentra no bug foi fornecido nos comentários que achei realmente útil para não perder tempo. Este bug foi corrigido começando GCC 3.4.6
.
Eu tive esse problema enquanto uso GCC 3.3.1
com binutils 2.15.92
e binutils 2.17.50
E ambos não funcionaram. Então, para mim, claramente não era a mistura de GCC
e binutils
versões que fizeram o problema.
Se você deve usar um mais velho GCC
versão que você pode usar este patch fornecido por H.J.
e faça isso manualmente, então reconstrua seu antigo GCC
novamente.
Verifique os anexos nos links fornecidos que mostram o diferencial exato para a correção.
Eu mesmo fiz isso e testei e funcionou com sucesso, corrigindo GCC 3.3.1
com a primeira correção "sem grupo de comdat", reconstruí -lo e usei com binutils 2.15.92
e binutils 2.17.50
.