Разрешение символов в общем объекте в исполняемый файл

Как я могу создать исполняемый файл, который загружает общий объект динамически и разрешает его неопределенные символы в сам исполняемый файл? В линуксе

Например, общий объект имеет

extern int a;
void f() { a=1; }

и исполняемый файл имеет

int a;

Я хотел бы позвонить f() из исполняемого файла и имеют значение a изменилось.

Благодарю.

1 ответ

Решение

От dlopen справочная страница:

Внешние ссылки в библиотеке разрешаются с использованием библиотек в списке зависимостей этой библиотеки и любых других библиотек, ранее открытых с флагом RTLD_GLOBAL. Если исполняемый файл был связан с флагом "-rdynamic" (или, как синоним, "--export-dynamic"), то глобальные символы в исполняемом файле также будут использоваться для разрешения ссылок в динамически загружаемой библиотеке.

Итак, перекомпилируем ваше основное приложение с -rdynamic должно помочь

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