El proyecto GNU Binutils (que contiene el enlazador GNU (ld)) no está en el origen de este cambio de comportamiento, sino Debian (2016)1 y Gentoo (¡2013!)2.
Según el compromiso de gentoo de Mike Frysinger en enero de 2013:
"Las "nuevas" opciones de dtags existen desde hace más de 14 años, así que para los objetivos de Linux y GNU, actívelas de forma predeterminada".
Este cambio no es bien recibido 3, 4, 5, ya que RUNPATH y RPATH tienen "diferencias de comportamiento no documentadas"... Sorprendentemente, estos cambios ahora se aplican en Debian estable.
El problema es que usar RUNPATH conduce a problemas impredecibles... Pero principalmente funciona. De wikipedia:
El enlazador dinámico ld no busca ubicaciones DT_RUNPATH para dependencias transitivas , a diferencia de DT_RPATH.
¿Hay alguna forma de forzar el antiguo comportamiento?
Sí. Puedes usar esta opción -Wl,--disable-new-dtags
para decir lo nuevo enlazador para usar el antiguo comportamiento, es decir, RPATH.
¿Es posible decirle a la versión anterior del enlazador que produzca la nueva salida (es decir, RUNPATH en lugar de RPATH)?
Sí. Usa -Wl,--enable-new-dtags
decirle a los viejos enlazador para usar el nuevo comportamiento, es decir, RUNPATH.
Verifiqué el ejecutable con readelf
y estas dos opciones parecen controlar lo que se escribirá en la sección ELF Dynamic. Creo que el problema se debió a un cambio en los valores predeterminados de la nueva versión, aunque, curiosamente, la página del manual para ld
sugeriría que debería seguir siendo el mismo:
--habilitar-nuevas-dtags
--disable-new-dtags
Este enlazador puede crear las nuevas etiquetas dinámicas en ELF. Pero los sistemas ELF más antiguos pueden no entenderlos. Si especifica --enable-new-dtags, las nuevas etiquetas dinámicas se crearán según sea necesario y se omitirán las etiquetas dinámicas anteriores. Si especifica --disable-new-dtags, no se crearán nuevas etiquetas dinámicas. De forma predeterminada, las nuevas etiquetas dinámicas no se crean. Tenga en cuenta que esas opciones solo están disponibles para los sistemas ELF.