Red Hat Training

A Red Hat training course is available for RHEL 8

13.4. Especificidades dos binutils no GCC Toolset 9

Ligação estática de bibliotecas

Algumas características mais recentes da biblioteca estão estaticamente ligadas em aplicações construídas com o GCC Toolset para suportar a execução em múltiplas versões do Red Hat Enterprise Linux. Isto cria um risco adicional de segurança menor como errata padrão do Red Hat Enterprise Linux não altera este código. Se surgir a necessidade de os desenvolvedores reconstruírem suas aplicações devido a este risco, a Red Hat comunicará isto usando uma errata de segurança.

Importante

Devido a este risco adicional de segurança, os desenvolvedores são fortemente aconselhados a não ligar estaticamente toda a sua aplicação pelas mesmas razões.

Especificar bibliotecas após arquivos objeto ao fazer a ligação

No GCC Toolset, as bibliotecas são ligadas usando scripts de linker que podem especificar alguns símbolos através de arquivos estáticos. Isto é necessário para garantir a compatibilidade com múltiplas versões do Red Hat Enterprise Linux. Entretanto, os scripts de linker usam os nomes dos respectivos arquivos objetos compartilhados. Como conseqüência, o linker usa regras de manuseio de símbolos diferentes das esperadas, e não reconhece símbolos requeridos pelos arquivos objeto quando a opção adicionando a biblioteca é especificada antes das opções especificando os arquivos objeto:

$ scl enable gcc-toolset-9 'ld -lsomelib objfile.o'

A utilização de uma biblioteca do GCC Toolset desta forma resulta na mensagem de erro do linker undefined reference to symbol. Para evitar este problema, siga a prática padrão de linker, e especifique a opção adicionando a biblioteca após as opções especificando os arquivos objeto:

$ scl enable gcc-toolset-9 'ld objfile.o -lsomelib'

Note que esta recomendação também se aplica ao usar a versão básica do Red Hat Enterprise Linux binutils.