Red Hat Training

A Red Hat training course is available for RHEL 8

14.4. Particularidades de binutils en GCC Toolset 10

Vinculación estática de las bibliotecas

Ciertas características más recientes de las bibliotecas están enlazadas estáticamente en las aplicaciones construidas con GCC Toolset para soportar la ejecución en múltiples versiones de Red Hat Enterprise Linux. Esto crea un riesgo de seguridad menor adicional ya que las erratas estándar de Red Hat Enterprise Linux no cambian este código. Si surge la necesidad de que los desarrolladores reconstruyan sus aplicaciones debido a este riesgo, Red Hat lo comunicará mediante una errata de seguridad.

Importante

Debido a este riesgo de seguridad adicional, se recomienda encarecidamente a los desarrolladores que no enlacen estáticamente toda su aplicación por las mismas razones.

Especificar las bibliotecas después de los archivos de objetos al enlazar

En el conjunto de herramientas GCC, las bibliotecas se enlazan utilizando scripts de enlace que pueden especificar algunos símbolos a través de archivos estáticos. Esto es necesario para asegurar la compatibilidad con múltiples versiones de Red Hat Enterprise Linux. Sin embargo, los scripts del enlazador utilizan los nombres de los respectivos archivos de objetos compartidos. Como consecuencia, el enlazador utiliza reglas de manejo de símbolos diferentes a las esperadas y no reconoce los símbolos requeridos por los archivos de objetos cuando la opción que añade la biblioteca se especifica antes de las opciones que especifican los archivos de objetos:

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

El uso de una biblioteca de GCC Toolset de esta manera resulta en el mensaje de error del enlazador undefined reference to symbol. Para evitar este problema, siga la práctica de enlazado estándar y especifique la opción de añadir la biblioteca después de las opciones que especifican los archivos de objetos:

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

Tenga en cuenta que esta recomendación también se aplica cuando se utiliza la versión básica de Red Hat Enterprise Linux de binutils.