Объединить разделы с ld

Я хотел бы объединить несколько файлов .o в один .o, а также объединить некоторые разделы.

Если я выполню

ld -r first.o second.o -o result.o

тогда он правильно объединяет объектные файлы, но мне также нужно объединить различные разделы .text. Эта функция объединения разделов доступна по умолчанию для сценария компоновщика в ld, когда вы связываете общий объект, но мне не удалось принудительно использовать собственный сценарий компоновщика при использовании -r. Кажется, я игнорирую любой скрипт, который я пробовал. Я попытался изменить скрипт компоновщика по умолчанию и заменил блок раздела .text этим

.text           :
{
*(.text.unlikely .text.*_unlikely)
*(.text.exit .text.exit.*)
*(.text.startup .text.startup.*)
*(.text.hot .text.hot.*)
*(.text .stub .text.* .gnu.linkonce.t.*)
/* .gnu.warning sections are handled specially by elf32.em.  */
*(.gnu.warning)
} =0x90909090

Как я могу объединить объектные файлы, а также объединить .text разделы с помощью ld?

1

Решение

но не объединяя все .text * разделы объектных файлов, как .text, .text._ZN13somenamespace3FooD1Ev

Наличие .text._ZN13somenamespace3FooD1Ev вероятно означает, что вы компилируете с -ffunction-sectionsи действительно, скрипт компоновщика по умолчанию не будет объединять такие разделы: если вы хотите, чтобы они были объединены, вы не должны были использовать -ffunction-sections на первом месте!

Тем не менее, следующее сработало для меня, чтобы объединить все .text разделы:

ld -r -o t.o t1.o t2.o --verbose > /tmp/script

Примечание: скрипт компоновщика для ld -r ссылка разные из обычного линкерного скрипта (который вы, похоже, изменили).

Отредактируйте / tmp / script для удаления не скриптовых частей, а также для изменения:

  .text         0 :
{
*(.text .stub)
/* .gnu.warning sections are handled specially by elf32.em.  */
*(.gnu.warning)
}

К этому:

  .text         0 :
{
*(.text .stub .text.*)
/* .gnu.warning sections are handled specially by elf32.em.  */
*(.gnu.warning)
}

В заключение,

ld -r -o t.o t1.o t2.o -T /tmp/script

дает мне t.o со всем .text разделы объединены.

0

Другие решения


По вопросам рекламы [email protected]