2014-10-23 3 views
1

Я немного новичок в этом, так что извиняюсь, если это не имеет смысла/является глупым вопросом !!Портирование с Visual C++ на Linux

В любом случае, я создаю проект, который должен использовать OpenCV, а также UDP-сокеты. В настоящее время я пишу часть C++ в Visual Studio (2013), поэтому проект является визуальным C++. В конечном счете, план должен переместить проект с ПК на встроенный компьютер, на котором запущен некоторый дистрибутив Linux.

Мне интересно, возникнут ли какие-либо проблемы майора, которые могут вызвать у меня головные боли, если я разработаю весь код на C++ в Visual Studio, а затем попытаюсь подключиться к среде linux?

Также, если это так, есть ли способ избежать этих будущих проблем, просто изменив IDE или что-то еще?

+0

programers.stackexchange.com лучше для таких вопросов –

+0

Вы можете использовать библиотеку фреймов, такую ​​как [Poco] (http://pocoproject.org/), [Boost] (http://boost.org/), [Qt] (http://qt-project.org/). Вы должны установить Linux на свой компьютер! –

ответ

0

Вы можете использовать мультиплатформенный компилятор, такой как MINGW (http://www.mingw.org/) с кодами Codeblocks (http://www.codeblocks.org/) или Netbeans для предотвращения проблем совместимости. Письменный код должен быть очень совместимым. Но с компилятором Visual-C++, вероятно, сложнее скомпилировать в Linux программу, потому что этот компилятор работает только в Windows.

0

Я недавно перенес проект Visual C++ в дистрибутив Linux без серьезных проблем. Самая большая проблема была в том, что мне пришлось изменить все \ to /. Если вы сомневаетесь, вы всегда можете использовать мультиплатформенный компилятор.

1

Если вы используете MFC для своего графического интерфейса, вы можете попрощаться с любой возможностью перенести свой код на Linux один день.

Если вы используете визуальную студию только в качестве IDE и используете портативные сторонние библиотеки (Qt, boost ...), вы должны иметь возможность плавного переноса кода.

Один хороший способ для достижения этой цели:

  • Есть все имена файлов в нижнем регистре
  • Избегайте использования любого win32 API (предпочитают библиотеку Boost)
  • Как уже упоминалось выше, не используйте \ в пути к файлам,/почти всегда работает на всех платформах
  • написать несколько сценариев CMake для создания своих vcproj и SLN файлы
  • ... это не является исчерпывающим ...

Если это работает на ПК, вы можете использовать Cmake для генерации файлов Linux Makefile, и он, надеюсь, будет скомпилирован и запущен под Linux.

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

+0

На самом деле wxWidgets использует очень похожий API для MFC. Было много случаев, когда проект MFC был перенесен на wxWidgets в качестве первого шага по переносу проекта в Linux. –

+0

Хорошо, я этого не знал. Вы имеете в виду, что он такой же уродливый, как MFC? ;-) со всеми этими макросами ... Я бы порекомендовал пойти на Qt, он даже работает на Android и ios сейчас! – jpo38

+1

Из документа wxWidgets «События и события», найденного по адресу http://docs.wxwidgets.org/3.0/overview_events.html. «Существует два основных способа обработки событий в wxWidgets: один из них использует макросы таблицы событий и позволяет определять привязку между событиями и их обработчиками только статически, то есть во время компиляции программы, а другой использует wxEvtHandler :: Bind <>() и может использоваться для связывания и развязывания обработчиков динамически, то есть во время выполнения в зависимости от некоторых условий ». Первый метод использует макросы. Второе - нет. –

0

Возможно, есть проект, который компилируется с использованием Visual Studio в Windows, который также компилируется в Linux. У меня есть два таких проекта. Они могут быть найдены по адресу https://svn.sullivanandkey.com/SnKOpen/cpp/now/trunk/ и https://svn.sullivanandkey.com/SnKOpen/cpp/yekneb/trunk/.

Ни один из этих проектов не использует графический интерфейс, однако это возможно, если вы используете кросс-платформенную графическую библиотеку, такую ​​как wxWidgets, FLTK или Qt.

Проект My YekNeb состоит из следующих операционных систем: FreeBSD, GNU/Linux, Microsoft Windows, Solaris и ReactOS.

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

Иногда вам нужно использовать код, который ведет себя по-разному в зависимости от того, доступна ли данная функция на данной платформе. Я рекомендую не использовать методы, которые я использовал в двух проектах, упомянутых выше, для этого. В скором времени я перейду на CMake и воспользуюсь функциями конфигурации, найденными по адресу CMake:How To Write Platform Checks.

Надеюсь, это поможет.

Смежные вопросы