LINUX.ORG.RU

обновление so файла подгружаемой либы путем копирования с помощью cp

 ,


0

2

всем привет.

никак не могу понять одну вещь. Суть такая:

основной код подключает плагин, который подключается в виде so. файл лежит в папке plugins. Основной код использует функцию f1 из плагина.

Я еще раз, без изменения кода компилирую so файл и командой cp копирую его в папку plugins. Основной код падает при этом, при попытке обращения к функции f1.

Но если перед вызовов cp удалить старую версию плагина с помощю rm - то при замене файла плагина основной код не падает и я могу переподключить плагин сигналом.

почему так? пробовал флаги LASY и NOW при dlopen - флаги не влияют.

Я еще раз, без изменения кода компилирую so файл

Но если перед вызовов cp удалить старую версию плагина с помощю rm - то при замене файла плагина основной код не падает и я могу переподключить плагин сигналом.

А если изменить код? Может быть у тебя во втором случае читается старый файл с плагином, и поэтому всё «работает» (а на самом деле нет)

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

пытался менять код также. то есть обновил код плагина, пересобрал. скопировал его в папку плагинз (там лежит старая версия) - основной код вываливается, как только прошел cp. предполагаю что, почему то почему то происходит попытка обновить код плагина при изменении файла на диске...

elmir_k
() автор топика
Ответ на: комментарий от elmir_k

Выглядит так, что при rm основной процесс ссылается на «удаленные» данные, которые разлинкованны, но не затёрты. А cp тупо переписывает и всё процесс падает из-за сдвига адресов.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)
Ответ на: комментарий от crutch_master

а разве при обращении к функции плагина основной движок всегда будет лезть на диск за ним? (или за адресом функции?). я то думал что при динамической подгрузке там все в адресное пространство процесса помещается и похеру там что дальше происходит с файлом so

elmir_k
() автор топика
Ответ на: комментарий от elmir_k

Не знаю, но, как я понял, твой эксперимент показывает, что не всё так просто.

crutch_master ★★★★★
()
Ответ на: комментарий от elmir_k

оно не помещается, а мапится, вот cp и трет загруженную библиотеку

а после rm новый файл, и всё хорошо

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.