Как передавать данные контейнера STL при обновлении файла во время выполнения .so

#c #shared-libraries

#c #общие библиотеки

Вопрос:

У меня есть файлы .so, которые внутри них используют некоторые контейнеры STL. Проблема в том, что я заинтересован в оперативной выгрузке версии X из .so и замене ее версией Y из .so, но без потери данных. Если бы данные были просто необработанной памятью, я мог бы просто пересылать указатели при переключении, но я хотел бы использовать обычные контейнеры STL. Есть ли какой-нибудь способ сделать это. Копирование не является проблемой, если содержащиеся в нем данные могут быть переданы. Также будут активированы статические деструкторы при выгрузке old .so?

Ответ №1:

1) Иметь X.so сохраните его данные в файл (с номером версии!), выгрузите X.so , нагрузка Y.so , иметь Y.so загрузите данные из файла.
2) вместо этого иметь имена версий, загружать оба, иметь Y.so наполняйте его контейнеры непосредственно из X.so контейнеры (проверьте номер версии!), Затем выгрузите X.so .

Я действительно не рекомендую передавать контейнеры напрямую, так как, если ABI по какой-либо причине несовместимы, он будет нормально компилироваться, но сбой во время выполнения. Это также упрощает преднамеренное изменение ABI.

Комментарии:

1. Да, время найти хорошую библиотеку сериализации .