Das Projekt GNU Binutils (enthält den GNU-Linker (ld)) ist nicht der Ursprung dieser Verhaltensänderung, sondern Debian (2016)1 und Gentoo (2013!)2.
Laut gentoo Commit von Mike Frysinger vom Januar 2013 :
"Die "neuen" dtags-Optionen gibt es jetzt seit mehr als 14 Jahren, also sollten Sie sie für Linux- und GNU-Ziele standardmäßig aktivieren."
Diese Änderung wird nicht gut aufgenommen 3, 4, 5, da RUNPATH und RPATH "undokumentierte Verhaltensunterschiede" haben ... Überraschenderweise werden diese Änderungen jetzt auf Debian Stable angewendet.
Das Problem ist, dass die Verwendung von RUNPATH zu unvorhersehbaren Problemen führt ... Aber hauptsächlich funktioniert es einfach. Aus Wikipedia:
Der dynamische Linker ld durchsucht DT_RUNPATH-Speicherorte nicht nach transitiven Abhängigkeiten , im Gegensatz zu DT_RPATH.
Gibt es eine Möglichkeit, das alte Verhalten zu erzwingen?
Ja. Sie können diese Option -Wl,--disable-new-dtags
verwenden um das Neue zu erzählen Linker, um den alten zu verwenden Verhalten, d.h. RPATH.
Ist es möglich, die alte Version des Linkers anzuweisen, die neue Ausgabe zu erzeugen (d. h. RUNPATH statt RPATH)?
Ja. Verwenden Sie -Wl,--enable-new-dtags
um es den alten zu sagen Linker, um den neuen zu verwenden Verhalten, d.h. RUNPATH.
Ich habe die ausführbare Datei mit readelf
verifiziert und diese beiden Optionen scheinen zu steuern, was im Abschnitt ELF Dynamic geschrieben wird. Ich denke, das Problem wurde durch eine Änderung der Standardeinstellungen für die neue Version verursacht, obwohl interessanterweise die Handbuchseite für ld
würde vorschlagen, dass es immer noch dasselbe sein sollte:
--enable-new-dtags
--disable-new-dtags
Dieser Linker kann die neuen dynamischen Tags in ELF erstellen. Aber die älteren ELF-Systeme verstehen sie möglicherweise nicht. Wenn Sie --enable-new-dtags angeben, werden die neuen dynamischen Tags nach Bedarf erstellt und ältere dynamische Tags werden ausgelassen. Wenn Sie --disable-new-dtags angeben, werden keine neuen dynamischen Tags erstellt. Standardmäßig werden die neuen dynamischen Tags nicht erstellt. Beachten Sie, dass diese Optionen nur für ELF-Systeme verfügbar sind.