Замена общего объекта (файла .so) во время работы основной программы

У меня есть общий объект gateway.so (в Linux / C). И a. приложение использует его.

ВОПРОС A

Я предполагаю: когда запускается процесс a.out, загрузчик загружает шлюз.so (я не использую функции dl, такие как dlopen ). разрешение символов времени выполнения для gateway.so будет происходить в памяти. Ему больше не нужно обращаться к gateway.so с диска.

Я прав?

Поэтому я не могу заменить gateway.so на обновленную версию, в то время как a.out работает, не так ли?

ВОПРОС B

Другой связанный вопрос: однажды, когда я заменил устаревшую версию файла gateway.so, я получил сообщение

«a.out: не удается разрешить symbol 'Test_OpenGateway' "

Какой программный компонент (загрузчик / компоновщик ...) отправляет этот вывод? Этот компонент выполняется как часть того же контекста процесса?

16
задан Rodrigo de Azevedo 4 July 2018 в 14:44
поделиться