В linux / gcc есть команда rebase (dll)? - PullRequest
       26

В linux / gcc есть команда rebase (dll)?

1 голос
/ 14 сентября 2009

В Windows rebase изменяет предпочтительное расположение загрузки для DLL и (я читал) может значительно уменьшить время загрузки приложения. Есть ли похожая концепция в Linux и / или gcc?

Ответы [ 2 ]

1 голос
/ 14 сентября 2009

Некоторые дистрибутивы поставляются с prelink , который делает что-то похожее на это. DT_GNU_HASH , которые постепенно внедряются, ускоряют процесс.

Он сканирует все исполняемые файлы и разделяемые библиотеки, пытается определить и изменить оптимальный адрес загрузки для разделяемых библиотек, чтобы избежать перемещения времени загрузки. Перемещение времени загрузки - это то, что может замедлить запуск приложения, а также использовать больше памяти - хотя «проблема» гораздо меньше, чем в Windows.

http://people.redhat.com/jakub/prelink.pdf рассказывает, как помогает предварительная ссылка.

1 голос
/ 14 сентября 2009

По моему опыту, rebase не очень помогает в Windows. Вероятно, в то время, когда DLL были меньше, это помогло больше, но я думаю, что вы, скорее всего, ограничены производительностью ввода-вывода жесткого диска.

Чтобы ответить на ваш конкретный вопрос, разделяемые библиотеки в linux сильно отличаются от разделяемых библиотек в Windows. Я не верю, что существует какая-то аналогичная концепция в отношении перебазирования. Вы можете прочитать больше о разделяемых библиотеках и динамической загрузке здесь.

Вот еще одна ссылка, Динамическое связывание , которая объясняет, почему перебазирование не требуется в Linux, если вы используете код, независимый от позиции. В Windows это недоступно, то есть перебазирование должно происходить во время выполнения. Следует отметить, что перебазирование в Windows не гарантирует изменения в каждой системе, только системы, в которых базовый адрес dll по умолчанию не используется при запуске вашей программы.

...