Опубликовать предварительное, ужасное, хакерское решение.
Зависимости библиотеки хранятся в блоке ELF, известном как блок .depends. Формат этого блока представляет собой большой массив пар идентификатор / указатель строки, причем указатель строки указывает на стандартную строку C с нулевым символом в конце, расположенную где-то в двоичном файле.
Вы видите, куда это идет, верно?
Да, пока новый путь, который вам нужен, не больше, чем старый, вы можете просто добраться до двоичного файла и выполнить простую замену строки. Убедитесь, что не добавляете и не удаляете байты, иначе вы сломаете весь двоичный файл. Если вы хотите быть в безопасности от этого, вы могли бы на самом деле пройти через структуру ELF, чтобы убедиться, что вы нашли правильное местоположение - сейчас я просто проверяю, чтобы строка-источник отображалась ровно один раз.
ELF включает в себя контрольную сумму, но, очевидно, нет загрузчика, который на самом деле его проверяет, поэтому его "безопасно" - хотя и грязно - игнорировать.
«Реальным решением» была бы утилита, позволяющая низкоуровневые обобщенные манипуляции со структурой ELF. Насколько я могу судить, такой утилиты не существует, за исключением нескольких специализированных случаев (в основном RPATH). Я не претендую на то, чтобы понять, насколько сложно написать такую утилиту.
Мне бы очень хотелось найти лучшее решение, но пока это работает.