LINUX.ORG.RU

Как перенести проект с Windows на Linux или с чего начать? Есть cpp проект под винду, рабочий. Необходимо перенести на Linux


0

2

Имется рабочий проект (cpp)винду. Необходимо перенести на его Linux и продолжить программировать далее. С Линуксом работал на уровне пользователя (знаком с командной строкой). Проект написан Microsoft Visual Studio 2010. Учитывая вышеизложенное, прошу помочь советом - на какой платформе/системе лучше всего начать? - какие пакеты С++ необходимы для старта/переноса исходников? - где брать стандартные библиотеки? - что нужно еще? Спасибо.

Берешь исходники и пытаешься собрать. Смотришь, на что ругается. Если проект чистый c++ без winapi, то перенестись должно относительно просто. Если есть winapi - надо писать линуксовые аналоги и закрывать макросами для условной компиляции под разные платформы.

P.s. Квалифицированный экстрасенс - ищу баги в чужом коде по фотографии автора, профилирую в уме, ищу гонки по тараканам.

grondek
()

Проект написан Microsoft Visual Studio 2010

Что вендо-специфичного используется в проекте?

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

да, winapi используется. Работа с сетью (принял данные, обработал - отправил или записал на HDD) Из чего то специфичного - вроде пока ничего, кроме математики.

Интересует какой дистрибутив ставить, и какие пакеты для программирования, а так же где нарыть стандартных библиотек?

wellcom
() автор топика

Если приложение серьёзно виндовое (winapi), то есть такой алгоритм:

1. На винде научиться собирать его с помощью mingw — visual c++ в linux всё равно нет, так что всё равно придётся сделать код совместимым с gcc.

2. Научившись, перенести исходники на linux, поставить wine, заменить все вызовы gcc на winegcc, windres на wrc и т.д. (см. man winegcc), и опять же добиться чтобы компилировалось и запускалось).

3. Дальше действовать сообразно предложениям выше по треду по выкидыванию зависимости от winelib.

anonymous
()
Ответ на: комментарий от wellcom

Интересует какой дистрибутив ставить

тот, работу приложения под которым вы собираетесь обеспечивать.

какие пакеты для программирования

стандартный набор для разработки в дистрибутиве (debian/ubuntu: build-essential, archlinux: base-devel)

где нарыть стандартных библиотек

на то они и стандартные, чтобы входить в комплект поставки, верно?

anonymous
()
Ответ на: комментарий от wellcom

Дистрибутив - пофиг, что нравится, хоть убунта, хоть федора, да хоть генту собирай. Для разработки все идет в составе дистрибутива:

sudo yum/apt-get/что-то-там install <пакет> 

Компилятор gcc, IDE какая удобнее - QtCreator, KDevelop, Eclipse.

Сеть вроде надо переписывать, там api несколько другой, если гуйни нет, то скорее всего немного дорабатывать (мне так кажется из-за моего монитора ).

grondek
()

В целом обычно в таком случае переписывают с winapi на Qt. (т.е. даже виндовая версия будет на Qt, а winapi просто выкидывают).

anonymous
()
Ответ на: комментарий от wellcom

какой дистрибутив ставить

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

где нарыть стандартных библиотек

Это тебе не мастдайка, ничего "рыть" не надо. Ставишь из репы все, что нужно, и не паришься.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от mbivanyuk

нуу ... можно еще с вайнлиб =)))

anonymous
()

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

RVictor
()

Поясните мне, как человеку далекому от ЛОРовских телепатов, что вы хотите перенести на Линукс. То ли разработку на линуксе, но в результате получать теже ЕХЕ под виндовс, то ли портировать проект на линукс, т.е. получить ELF файл для запуска на линуксе?

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

по сути для принять-обработать-отправить/сохранить данные обертка в Linuxe не нужна, я так понимаю и wine не нужен. Или использовать/писать окна для Linux. выглядит примерно так: - в винде научиться собирать с помощью mingw

- Ubuntu подойдет, установить debian/ubuntu: build-essential, archlinux: base-devel

- wine не нужен, обертка не важна

- что то упустил??

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

да, winapi используется

Вангую сотни боли и «говно этот ваш линукс» в итоге. Надо было думать прежде, чем юзать winapi.

entefeed ☆☆☆
()

Если Win-специфичного кода не много(не используются большие фреймворки/тулкитьі), то: Собираешь проект которьій есть под линуксом. Весь код, генерирующий еррорьі комментируешь. Как будет собираться без ерроров анализируешь закомментированньій код. Подбираешь библиотеки/тулкитьі/фреймворки которьіе вернут проекту функциональность закомментированного кода.

Если много - то сначала находишь замену Win-специфичньім фреймворкам либо кроссплатформенную, либо из стандарньіх средств язьіка. Собираешь под виндой работающий проект и дальше по пункту 1.

mamba_namba_karamba
()
Ответ на: комментарий от wellcom

Под виндной перепиши сетевую часть на кроссплатформенную либу (boost.asio, например), если еще где-то юзается вин-свецифичное API - поступаем с ним так же как с сетевой частью. Потом пытаемся скомпилить этот проект под Linux (например, Ubuntu).

NegatiV
()
Ответ на: комментарий от wellcom

Если там ВСЁ на WinAPI то проще переписать с нуля. Если на винапи только окна, то просто фронтенд другой сделать. Ну это, конечно, если все остальное не прибито гвоздями к гуйне (-> к винапи).

anonymous
()
Ответ на: комментарий от Eddy_Em

Брехню не пиши. Гуйня в нормальных проектах «гальванически» развязана с двиглом.

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

Зачем, если все уже сделано и отлажено в boost.asio? А так придется самому писать классы, отлаживать, если понадобится асинхронность и мы забыли ее сразу заложить туда, то еще и переписывать из-за косяков в дизайне. А нормальные пацаны сразу заюзали boost.asio и запустили в хайлоад. :)

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

Нормальньіе пацаньі на ерланге делали бьі. Ну или уж если переносить старьій код так сразу на ерланг, чтоб потом с крестами не мучаться.

mamba_namba_karamba
()
Ответ на: комментарий от anonymous

Лорчую этого мудрого анонимуса.

anonymous
()
Ответ на: комментарий от Eddy_Em

где нарыть стандартных библиотек

Это тебе не мастдайка, ничего «рыть» не надо

У тебя какие-то комплексы? Или ты в кроссплаформу не пробовал, но «мнение имеешь»?

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

Нормальньіе пацаньі на ерланге делали бьі.

Ну да, типа из эрланга нельза винапи продернуть )

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

ты в кроссплаформу не пробовал

Зачем мне эти извращения? Ты еще скажи кути использовать! Я и от GTK-то решил отказаться нафиг! В следующий раз если что-то гуевое буду делать и веб-морда не пойдет, то буду на OpenGL пилить.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от anonymous

При чем здесь понты? Гента и слака — единственные более-менее держащиеся на плаву дистрибутивы. Остальные все уже в дерьме втопли.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

А меж тем, тролли (или то, что от них осталось) таки дописали на Qt свой tcl/tk.

Смотри, например: https://github.com/Swordfish90/cool-retro-term/tree/master/app/qml

Вполне можно уже на нём писать, причём вовсе без C++ — qml-ный рантайм (qmlscene) прилагается.

anonymous
()

Как перенести проект с Windows на Linux или с чего начать?

man 2 intro

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

Да вы, батенька, знатный извращенец. У нас огромный проект (проприетарный) на Qt писан. Win и Lin только инсталляторы разные и некоторая системная обвящка типа старта сервисов. Сейчас уже и на MacOS метимся.

А на OpenGL писать... окна-то создавать чем-то надо будет все равно.

grondek
()

Вынеси весь специфичный код в либу, остальное перепиши на бусте, или чём нить ещё кроссплатформенном.

batbko
()
Ответ на: комментарий от grondek

окна-то создавать чем-то надо будет все равно

А xlib на что? Работает же!

Вон, скажем, mplayer — отличный пример, как можно без идиотских культей-говнотыков жить!

Eddy_Em ☆☆☆☆☆
()

Прямо под виндой перепиши всё на Boost и Qt. То что получилось перетаскиваешь в Ubuntu, проверяешь собирается ли, ошибки фиксишь. Приготовься к большому количеству страха и боли.

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 1)

скажи директору что тебя нужно уволить и нанять нормального программиста. других вариантов не бывает.

anonymous
()

Ну, всё уже написали в принципе. Я добавлю:
1) Всё что можно из говон-вин-апи заменить на stl или crt вызовы.
2) С сетью, надеюсь использя сокеты работаешь? Тогда там особо переписывать не надо.

Ставь ubuntu lts. Потом sudo apt-get install g++ (хотя я бы ставил clang++) и cmake :)

3) выкидаешь свои .sln и прочие .vcproj файлы от студии, а для управления сборкой используешь cmake. Фишка в том, что потом при необходимости сконпилять под шиндошс cmake сгенерирует тебе твои .sln как надо. Зато будет универсально.

И да, про git не забудь :)

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

где нарыть стандартных библиотек?

Что это вообще значит?)) Стандартных для чего? С++? apt-get install g++

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

А нормальные пацаны сразу заюзали boost.asio и запустили в хайлоад. :)

Гыгы. В прошлом треде мне показали суть внутренней реализации boost::asio (да, я там был неправ). И highload ей с такой реализацией явно не светит:)

З.Ы. Равно как и винде с ее ограничением WaitForMultipleObjects() на 64 дескриптора:)

Pavval ★★★★★
()

GUI посредством чего сделан?

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

3) выкидаешь свои .sln и прочие .vcproj файлы от студии, а для управления сборкой используешь cmake.

не слушай этого хипстора, изучай autoconf и automake :)

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

ну зашибись теперь, целый boost вместо уже работающего и написанного сетевого кода тащить, когда там разница в паре макросов и функций всего

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