Объединить символы из нескольких объектных файлов в таблицу (например, 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

Вуаля: у вас есть таблица, в которой все символы добавляются последовательно.

Другие вопросы по тегам