Объединить символы из нескольких объектных файлов в таблицу (например, vtable) во время соединения
Это может быть невозможно, но я хотел бы сделать что-то похожее на создание vtable во время компоновки. То есть сначала я хочу испускать различные функциональные символы независимо в отдельных объектных файлах. Затем я хотел бы, чтобы компоновщик создал таблицу, в которой символы добавляются последовательно, и мог ссылаться на записи в этой таблице.
Я изучил, как, возможно, я мог бы использовать сценарии компоновщика и / или записи перемещения для создания этой таблицы, но я не смог найти удовлетворительного решения.
Вы когда-нибудь видели что-нибудь подобное? Любой совет, как этого добиться?
1 ответ
Я не мог найти удовлетворительного решения.
Предположим, у вас есть a.o
, b.o
а также c.o
определяющий a()
, b()
а также c()
соответственно.
Создайте и скомпилируйте этот источник:
// table.c
extern void a(), b(), c();
void (*table[])() = { &a, &b, &c, 0 };
Теперь свяжите их вместе:
ld -r -o foo.o a.o b.o c.o table.o
Вуаля: у вас есть таблица, в которой все символы добавляются последовательно.