Последние несколько лет я работаю над C++ и COM / ATL в Windows. Теперь я хочу перейти к программированию под Linux. Я знаю базовую архитектуру Linux. Я выполнил несколько проектов, в которых используются ncurses, сокеты и аудио библиотеки (терминальные приложения). С каким инструментом я должен быть знаком, чтобы начать работу с проектами. В Windows я начал с программирования Win32, затем перешел на COM и ATL. Программирование Win32 дало мне представление о Windows.
Можете ли вы дать мне шаги, чтобы начать программирование под Linux?
Придумайте более информативный заголовок для вашего вопроса.
Не надо. Напишите весь код кроссплатформенного, чтобы он был действительным win / lin / bsd / mac.





Зависит от того, что вы пытаетесь сделать ...
Собираетесь ли вы делать приложения с графическим интерфейсом? Изучите Qt, GTK или wxWidgets. Собираетесь ли вы заниматься разработкой драйверов устройств? Изучите чистый C, а не только C++. Многие интересные разработки программного обеспечения под Linux происходят на Python и Perl (и в меньшей степени на других динамических языках), так что вам почти наверняка стоит изучить один из них.
Остальное зависит от того, чем вы хотите заниматься.
Вам не нужно быть экспертом в этом вопросе; со временем вы научитесь.
он спросил, как начать программировать (а не однострочники bash)
Он четко пометил свой вопрос с помощью C / C++, почему вы предлагаете bash, ruby, python e.t.c ????
Знание API C / C++ в Linux дает вам только часть пути - обычно вам нужно знать о сценариях оболочки, чтобы вы могли писать сценарии сборки, сценарии установки и т. д.
Я понимаю, почему вы задаете свой вопрос таким образом, но Linux - это не Windows, поэтому прямого ответа нет. На самом деле мы говорим о GNU / linux + всей экосистеме свободного программного обеспечения, поэтому то, что вам нужно изучить, во многом зависит от того, что вы хотите делать.
Если вы больше занимаетесь системным программированием, вам нужно будет изучить ядро Linux, и вам нужно будет поработать над своими навыками C.
Если вы хотите кодировать утилиты, языки сценариев (особенно ruby и python) будут вашими предпочтительными инструментами, и вам нужно будет выбрать структуру графического интерфейса поверх этого (GTK, QT и wxWidget показывают путь).
Если это больше о веб-программировании и сетевом программировании: это могут сделать python, ruby, php или java.
В среде Linux у вас есть выбор, потому что многие люди используют множество разных инструментов. Это может показаться беспорядочным, и часто так оно и есть, но работает не так уж плохо.
Так что перестаньте думать о том, чему вы должны научиться, и сосредоточьтесь на двух вопросах:
Свободный, как и свобода помощника, означает, что вы можете выбирать.
Я также рекомендую вам изучить STL и Boost - последний особенно полезен при написании приложений C++ в Linux, поскольку вы получаете библиотеки для потоковой передачи, файловой системы, регулярных выражений и т. д. Кроме того, при необходимости код можно перенести обратно в Windows. Так я начал работать с Linux - я взял проект Windows, преобразовал его для использования STL / Boost и добавил пользовательский интерфейс на основе браузера. После того, как он был запущен и запущен в Windows, но без фактических особенностей Windows в коде, я приступил к изучению основ Linux (gcc, make и т. д.) И очень быстро заставил его работать.
Воспользуйтесь своими уже с трудом заработанными знаниями в области COM и узнайте что-нибудь вроде ТАО. Очевидно, что в мире unix нет ATL или WTL ... так что вам придется потратить время на изучение STL - хорошая новость в том, что STL существует и для Windows. Способствовать росту поможет вам значительно упростить переключение между платформами, так что вам тоже следует научиться этому.
Кроме того, это действительно зависит от того, чем вы хотите заниматься.
Я бы порекомендовал вам начать с использования Gentoo, это должно быть сложно в первые недели, но через некоторое время (скажем, 2 месяца или меньше, если вы понимаете основы Linux) вы сможете использовать любой дистрибутив, и вы точно будете знать, что будет происходит и как в вашей системе, когда вы что-то нажимаете / набираете, я думаю, вам будут переплачивать за это больше времени (изучить gentoo немного сложнее, чем другие дистрибутивы), потраченное на Gentoo. И я думаю, это будет полезно при программировании под Linux.
При разработке для Linux я обычно придерживаюсь основ: vim, gcc, gdb (из командной строки, без внешних интерфейсов), svn, cscope, Valgrind, make (не то чтобы я большой поклонник make, я признаю). Существуют различные графические интерфейсы и даже IDE, но они мне не нравятся.
Я предлагаю изучить CMake - это отличный кроссплатформенный инструмент для сборки, который намного проще в использовании, чем make / autotools.
Не могли бы вы подробнее рассказать о том, что вы надеетесь делать в том, что касается программирования для Linux? В любом случае Этот может содержать большую часть того, через что вы надеетесь пройти.
Начните читать книгу Продвинутое программирование Linux, которая также доступна в виде бесплатного PDF-файла.
Не бойтесь ключевого слова передовой. Судя по деталям вашего сообщения (ncurses, сокеты), вы уже "продвинуты".
Вы также можете позже посмотреть библиотеку бойкий (стандартный компонент GTK + / GNOME, но также используется в приложениях командной строки.)
Если вам абсолютно необходимо программировать на C++, прочтите всю документацию QT и вам хорошо идти.
Это поможет вам понять, почему все делается так, как есть в системе на основе * unix.
Лучше получить его прямо в источнике (поскольку он включает в себя бесплатную версию, доступную для просмотра, исправления и т. д.): catb.org/esr/writings/taoup
Что именно вы имеете в виду под профессиональными проектами? Я знаю ряд инструментов на основе скриптов, которые используются профессионалами, и поэтому их можно назвать профессиональными проектами. Но также у каждого проекта будет лучший инструмент, так что это за проекты: музыка, графический интерфейс, сервер, графика, игры?