Портирование приложения из Solaris в Linux - PullRequest
4 голосов
/ 17 декабря 2008

Я должен взять на себя задачу переноса базы кода сетевого приложения C ++ большого размера с Solaris на платформу Linux. Код также использует сторонние библиотеки, такие как ACE. Первоначально приложение не было запланировано для возможного переноса в будущем.

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

-Prabhu. S

Ответы [ 4 ]

7 голосов
/ 17 декабря 2008

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

Если вы используете какую-либо внешнюю библиотеку Solaris, вам нужно найти эквивалент в linux и написать оболочку, чтобы остальная часть приложения не знала, какая реализация используется.

После этого переход на linux должен быть простым с использованием только одной базы кода. Вы должны скомпилировать и протестировать его полностью.

6 голосов
/ 17 декабря 2008

"Переносимых приложений не существует, только портированные приложения"

Сначала начните с использования одинаковых инструментов на обеих платформах, если можете. И.Е. если версия Solaris не была изменена для использования GCC, GNU make и т. д., я советую сначала изменить это и заставить сборку Solaris работать. Вы обнаружите, что сначала исправите проблемы с компилятором, а не пытаетесь их исправить в Linux одновременно с попыткой портировать приложение.

Во-вторых, убедитесь, что вы можете получить все одинаковые библиотеки на каждой платформе в одной и той же версии. Я думаю, что вы можете получить ACE для Linux. Убедитесь, что библиотеки этой версии работают на Solaris. Это ограничит проблемы совместимости.

Как только вы это сделаете, начинается настоящая работа.

Вам нужно будет скомпилировать каждый исходный файл по одному и найти функции, которые недоступны в Linux. Сначала ищите замену, которая доступна в обеих ОС. Если нет простой замены, создайте две библиотеки, одну для Solaris и одну для Linux. Создайте классы-оболочки или функции, чтобы абстрагироваться от несовместимости.

Если это звучит как большая работа - это так.

2 голосов
/ 24 декабря 2008

Я согласен с тем, что написал Дэвид Аллан Финч. Делайте порт по одному шагу за раз. Дополнительно:

Вы выходите из Solaris / SPARC или Solaris x86? Если это x86, у вас не будет никаких проблем с порядком байтов, но если это SPARC, вам нужно проверить свой код, чтобы убедиться в отсутствии проблем с порядком байтов (порядком байтов).

Является ли код Solaris 32-разрядным или 64-разрядным? Конечно, сначала сохраняйте адресное пространство таким же.

1 голос
/ 17 декабря 2008

Список ваших текущих внешних зависимостей. Узнайте, что из этого доступно в Linux. Для тех, кто не, вы должны найти замену. Если ссылки на эти внешние зависимости не абстрагируются за функциями или объектами, рефакторинг кода, чтобы это было так. Затем замените зависимости, чтобы вы могли реализовать функции абстрагирования с заменой.

...