Как передать данные контейнера STL при обновлении .so файла во время выполнения - PullRequest
0 голосов
/ 27 октября 2011

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

1 Ответ

2 голосов
/ 27 октября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...