Программирование на C ++ на платформе Linux - PullRequest
4 голосов
/ 10 мая 2010

Я инженер-программист и работаю в VC ++, C ++ в ОС Windows.

Существуют ли существенные различия в кодировании на C ++ в среде Linux.

Или это просто некоторые изменения, которые мы должны внести, когда нам нужно кодировать на C ++ в Linux.

Ответы [ 9 ]

9 голосов
/ 10 мая 2010

Это будет зависеть от типов проектов, над которыми вы работали, и от того, какие API Windows вы использовали. Например, если вы использовали встроенный Windows API для всего, у вас впереди довольно большая задача, вместо этого стоило бы сделать так, чтобы ваш проект хорошо работал с Wine.

В среде Linux у вас есть справочные страницы, довольно подробная документация почти всего :). Как упомянуто выше, посмотрите на POSIX, и хотя я рекомендую Qt - он предоставляет МНОГО абстракций для вещей, которые вы, возможно, захотите научиться использовать в Linux (например, сокеты, файловая система ...)

5 голосов
/ 10 мая 2010

Мир программирования Linux сильно отличается от того, с чем вы знакомы в мире Windows. Вы должны это понять и привыкнуть к этому. Как только вы поймете, вы не захотите возвращаться.

  1. У вас есть много небольших / хороших инструментов, которые работают друг с другом, а не все-в-одном решении MSVC. Например:

    В Linux у вас есть компилятор как автономный инструмент (коллекция компиляторов Gnu), у вас есть система сборки как автономный инструмент (autotools, CMake). У вас GNU Debugger в качестве отдельного инструмента, и у вас есть очень хорошие редакторы в качестве отдельного инструмента (например, hard core vim / emacs).

    Существуют интегрированные среды разработки, такие как Eclipse, Netbeans, KDevelop, Anjuta. но все же вы должны понимать, как все работает.

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

  2. OS Level API разработан для простоты. Вы редко найдете вызовы типа CreateProcessEx с параметрами bizzilion, вместо этого у вас будет простой fork() + exec(). человек - ваш настоящий друг во всем, что связано с системным API и стандартной библиотекой Си.

  3. GUI - у вас есть две большие библиотеки GUI Qt / GTK. Qt - отличная библиотека C ++, которая делает разработку GUI приятной (в отличие от MFC). GTK имеет API C и C ++ GTK и GTKmm (опыта работы с ними нет).

  4. i18n / l10n / unicode - это то, где программирование в Linux облегчает жизнь. Почти все это UTF-8. Нет широкого дерьма API, нет проблем с открытием китайских имен файлов с простым fopen или ifstream, нет библиотеки 3-ей части, которая не может открыть файл с именем Unicode. Доступны отличные встроенные инструменты, такие как gettext, и хорошие инструменты для перевода, такие как KBabel.

  5. Библиотеки - это то, где программирование Linux заставляет вас ненавидеть Windows. Почти каждая бесплатная библиотека уже установлена ​​или доступна с простыми apt-get или yum install. нет дерьма несовместимости отладки / выпуска, нет DLL_EXPORT-в, просто надежно, сделать общие объекты так же просто, как работать со статическими библиотеками (и большинство вообще не использует статические библиотеки).

Мои $ 0,02

(я программист Linux, много занимающийся разработкой Windows) ...

5 голосов
/ 10 мая 2010
  1. Используйте API POSIX вместо Win32 API.
  2. Используйте Mtkmm, Qt или wxWidgets вместо MFC.
2 голосов
/ 10 мая 2010

Это зависит от того, сколько окон-специфических вещей вы использовали. Стандартная часть C ++ такая же, но ее использование не продвинет вас намного дальше, чем приложения командной строки.

Есть также целая вещь makefile-вместо-letting-VS-build-for-you. В зависимости от того, какой инструмент (или IDE) вы решите использовать в Linux, это может иметь большое значение.

1 голос
/ 10 мая 2010

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

Я бы охарактеризовал среду * nix как "дружественную к гикам": в вашем распоряжении множество отличных и очень гибких инструментов. Некоторые из них вводят жесткую кривую обучения, а некоторые просто ломают голову, но по какой-то причине все еще популярны (делают), но если вы готовы потратить некоторое время на их правильное изучение, награда высока. На самом деле, я использую многие * nix-инструменты даже при работе в Windows: vim, grep, perl и т. Д. *

С другой стороны, платформа Windows предлагает Win32 API, который обладает гораздо большей функциональностью, чем POSIX, очень хорошо документирован и поддерживается очень хорошими инструментами. Отладчики в Windows (особенно windbg), как правило, более мощные, чем любой * nix-отладчик, который я пробовал, хотя gdb, как правило, достаточно хорош для большинства задач. Развертывание исполняемых файлов также проще, чем в мире Linux - фактически единственный действительно надежный способ развертывания программного обеспечения в Linux - это доставка исходного кода и его сборка на компьютерах клиентов с помощью config / make.

0 голосов
/ 10 мая 2010

Типичный Windows-программист, который привык к Visual C ++, может найти следующие аспекты романа по программированию в Linux C ++ или сложный:

  1. Программирование под Linux - это не программирование под Linux, это программирование под Unix. Корни Unix-программирования уходят намного дальше, чем корни MS-DOS в Windows, и это проявляется во многих местах.

  2. Программисты Windows склонны думать об окружающей среде, они в первую очередь думают об инструментах IDE (ваш графический редактор, компилятор, отладчик). Программисты Unix, как правило, работают в разных племенах, многим программистам на Unix (linux) на C ++ очень удобно работать из командной строки без IDE, а некоторые, я уверен, используют IDE в визуальном стиле студии в Linux, из которых много.

  3. Лично я обнаружил, что мне нужно научиться читать (и, возможно, писать) make-файл, создавать набор стандартных приложений Linux / Unix из исходного кода (и понимать, как набирать мой путь, выполняя такие шаги, как «автоконфигурация» и различные «--command-line-options», которые можно выбрать там), прежде чем я почувствую и вкус окружающей среды.

  4. Пока вы не являетесь опытным системным администратором Linux, возможно, вы захотите придерживаться новых для Linux дистрибутивов (таких как Ubuntu).

0 голосов
/ 10 мая 2010

Есть несколько существенных отличий, о которых я могу подумать:

  • Инструменты. Хорошие и плохие моменты. Если вы привыкли к Visual Studio, ничего подобного не существует. У каждой Linux IDE есть свои проблемы. С другой стороны, инструменты отладки особенно хороши. Но в целом вы должны создать свою собственную рабочую среду из того, что доступно.
  • API. Документация сильно разнится. Некоторые компоненты хорошо документированы, но часто вы в конечном итоге читаете исходный код, чтобы выяснить, как что-то должно работать. С другой стороны, у вас есть исходный код, так что в итоге у вас есть все инструменты, чтобы выяснить, почему что-то не работает.
  • Сообщество программистов Linux, как правило, очень хорошо, если вы не забываете вести себя и находите правильные места. Так что в некоторых вопросах не так уж и плохо, но иногда вам нужно найти другие места.
  • Вещи не такие автоматические, как вы могли бы узнать в мире Windows. Да, некоторые инструменты позволяют создавать проекты без знаний Makefile, но на самом деле вы должны научиться их использовать. В Windows гораздо чаще вы никогда не редактируете файлы проекта (например, Makefiles) вручную.
  • Если вы хотите работать в пространстве ядра (драйверы и т. Д.), C лучше, чем C ++, поскольку ядро ​​написано именно так.
  • И я согласен с людьми, предлагающими Qt. Очень красивый набор виджетов. По крайней мере, лучше, чем Swing (да, я знаю, это Java). И Qt Creator не так уж и плох.
  • Не стоит недооценивать силу сценариев оболочки! Что-то очень немногие программисты для Windows поняли, но вы можете сделать с ними очень много, чтобы помочь вашей работе.
0 голосов
/ 10 мая 2010

Посмотрите на исходный код какого-нибудь проекта с открытым исходным кодом, который работает как в Linux, так и в Windows. Как правило, более 80% кода идентичны, и чем больше проект, тем меньше системная часть. К сожалению, в системном коде могут присутствовать жесткие части (многопоточность, неблокирующий сетевой ввод-вывод, детали GUI).

0 голосов
/ 10 мая 2010

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

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