наше приложение использует несколько отображенных в памяти файлов для связи между несколькими процессами. Производство работает на Solaris с 64-разрядной версией, а разработчик — Linux с 32-разрядной версией. В будущем мы хотели бы использовать 64-разрядную версию Linux для всех сред. Компиляция уже завершена, и теперь мне нужны данные, которые хранятся в файлах, отображенных в памяти. К сожалению, я получаю «ошибку шины», если я использую файлы из 32-разрядной Linux. Если я использовал файлы 64-битного соляриса, процесс завис.
Насколько я понимаю, ошибка шины возникает из-за ошибки адресации в 32-битных файлах (адрес за концом файла). Кроме того, кажется, что файлы Solaris не совместимы с системой Linux. Таким образом, я создал новые файлы с отображением в памяти на 64-разрядной Linux, и приложение работает, но, очевидно, нет данных.
Есть ли способ, которым я могу прочитать старую версию этих файлов в моей новой 64-битной системе Linux? Я хотел бы написать свою собственную программу преобразования для извлечения данных и заполнения новых сгенерированных файлов.
Причиной сбоя является то, что вы загружаете файл в память, а затем пытаетесь получить к нему доступ, используя различные структуры данных — даже если они выглядят одинаково в вашем исходном коде, они не одинаковы во время выполнения, не при компиляции для разных архитектур.
Других решений пока нет …