Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Разработка консольного приложения.  (Прочитано 14131 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн neatek

  • Автор темы
  • Новичок
  • *
  • Сообщений: 21
    • Просмотр профиля
Привет всем, чисто ради интереса хочу попробовать написать какое-нибудь консольное приложение для линукса.
Вопросов много конечно, так как ни разу не затрагивал эту тему, но спрошу, вдруг кто ответит...

Как можно разработать какое-либо приложение для линукса через Windows? Есть ли IDE удобные под Win?
В чем вообще начать писать программу под Linux?

Компилировать как я понял можно только на самом Linux, при создании своего makefile'a...

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #1 : 18 Июня 2013, 19:53:02 »
neatek, сам вопрос какой-то не сформированный. Сначала определитесь, на каком ЯП писать будете. Потом что, потом для написания программ для Linux крайне желательно пользоваться Linux, иначе вероятнее всего ваши программы будут работать только под оффтопиком, так как Вы наверняка подключите какой-нибудь conio.h, а потом у Вас начнутся странные проблемы...

Оффлайн viktand

  • Участник
  • *
  • Сообщений: 190
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #2 : 19 Июня 2013, 06:28:21 »
В общем peregrine все правильно сказал.
Если уж сильно хочется именно windows->linux, то можно попробовать Lazarus. Среда программирования одинаковая в обеих системах, проекты будут в 99% случаев собираться одинаково успешно не зависимо от системы. Но это будет Pascal, т.е. не лучший выбор ЯП (хотя мне нравится).

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #3 : 19 Июня 2013, 10:28:22 »
Можно использовать Qt с QtCreator'ом, это на c++ будет. Можно вообще на python'е написать, тогда и компилировать не надо будет.

Оффлайн krimskiyhan

  • Любитель
  • *
  • Сообщений: 83
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #4 : 19 Июня 2013, 10:35:23 »
еще можно netbeans как вариант.

Оффлайн SergeyIT

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5681
  • Все по палатам!
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #5 : 19 Июня 2013, 13:42:03 »
В чем вообще начать писать программу под Linux?
Компилировать как я понял можно только на самом Linux, при создании своего makefile'a...
Писать можно начать в простом блокноте и далее, если это С -
http://www.firststeps.ru/linux/
Извините, я все еще учусь

Оффлайн krimskiyhan

  • Любитель
  • *
  • Сообщений: 83
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #6 : 19 Июня 2013, 13:42:56 »
Писать можно начать в простом блокноте и далее, если это С -
http://www.firststeps.ru/linux/
Я конечно не ТС, но большое спасибо за ссылку.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #7 : 19 Июня 2013, 17:20:42 »
viktand, на мой вкус бинари, созданные в Lazarus, тяжеловаты, даже после strip и UPX  :)
Правда смотрел его 2 года назад, изменилось ли что-то в размере бинариков?
Новые плюшки появились?
Как то больше люблю C/C++ подобный синтаксис, писать на нём короче, вместо begin { , вместо end }. Но что творится с Pascal не Linux мне тоже интересно.

Оффлайн Кровавый

  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #8 : 19 Июня 2013, 18:29:11 »
Привет всем, чисто ради интереса хочу попробовать написать какое-нибудь консольное приложение для линукса.
Вопросов много конечно, так как ни разу не затрагивал эту тему, но спрошу, вдруг кто ответит...

Как можно разработать какое-либо приложение для линукса через Windows? Есть ли IDE удобные под Win?
В чем вообще начать писать программу под Linux?

Компилировать как я понял можно только на самом Linux, при создании своего makefile'a...


Makefile вовсе не обязателен. Но существенно облегчает жизнь тем, кто это будет собирать в дальнейшем. :)


По сути, можно писать на чем угодно для чего угодно, главное, чтобы на целевой машине был необходимый компилятор/интерпретатор с используемыми библиотеками. То есть вы можете писать на С/С++, затем компилировать это под Linux, но только убедившись, что в вашем коде не используются платформозависимые API или библиотеки. Так же не стоит уповать на то, что путь "C:\\бла бла бла\Халява.txt" правильно воспримится в Linux, где нет понятия "буква диска". :)


С другой стороны, можете спокойно писать на С++ и Qt, а затем почти без проблем скомпилировать это под другой ОС. "Почти" означает, что возможно придется поправить имена подключаемых библиотек. Но это редко. В Qt, кстати, пути унифицированы. Почти. (букву диска не съест, а вот различие в "слешах" проглотит. :))


IDE у Qt своя. Входит в состав QtSDK - Qt Creator. Одинаково выглядит под всеми ОС. Не уступает VS, а где-то и получше будет. :) (Субъективно, конечно же!)
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #9 : 19 Июня 2013, 18:47:36 »
Кровавый, чтоб писать на Qt, а не быдлокодить надо иметь опыт, и опять ТС спрашивал про консольное приложение, а не GUI. И в Qt можно подключить conio.h или использовать функции WinAPI, тогда под линем тоже работать не будет. Думаю, для ТС лучший вариант дуалбут или виртуалка, но это если комп очень мощный, так как разработка в виртуалке та ещё пакость, так как будут тормоза. Вод дуалбут - другое дело, всё будет быстро работать, только переключение между ОС при перезагрузке или включении стрелочками.

Оффлайн Кровавый

  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #10 : 19 Июня 2013, 19:33:07 »
Кровавый, чтоб писать на Qt, а не быдлокодить надо иметь опыт, и опять ТС спрашивал про консольное приложение, а не GUI. И в Qt можно подключить conio.h или использовать функции WinAPI, тогда под линем тоже работать не будет.


QCoreApplication? :)
Это распространенная ошибка - считать, что Qt - это набор виджетов для создания GUI. Qt - это прежде всего фреймворк. И на нем можно писать консольные приложения.


Но вы правы, начинать следует с чистого языка, потому что изучение фреимворка подразумевает знание языка, синтаксиса, идеологии и пр.


И вы не правы одновременно. Я написал условия, при которых возможна разработка платформонезависимого ПО:


По сути, можно писать на чем угодно для чего угодно, главное, чтобы на целевой машине был необходимый компилятор/интерпретатор с используемыми библиотеками. То есть вы можете писать на С/С++, затем компилировать это под Linux, но только убедившись, что в вашем коде не используются платформозависимые API или библиотеки.
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #11 : 19 Июня 2013, 19:48:51 »
Кровавый, просто невнимательно прочитал Ваше сообщение. Вы правы, что если библиотеки есть, то можно писать платформонезависимый код, конечно, если не привязываться к зависимому API. Но вообще, чтоб писать аккуратно под Linux надо знать его идеологию. Тут не принято таскать библиотеки и класть их в папку с программой, хотя можно и иногда этого требует лицензия (для закрытого ПО слинкованного с LGPL). Если Canonical придёт к такому же подходу, как в Windows, то это будет началом конца для Ubuntu. Реестр тут тоже не принят, невзирая на все усилия Gnome. Есть и другие тонкости, которые хороший разработчик должен знать, специфичные для Linux, но полезные и в мире Windows.

Оффлайн Alexey_Pr

  • Любитель
  • *
  • Сообщений: 89
    • Просмотр профиля
    • Linux в Туле
Re: Разработка консольного приложения.
« Ответ #12 : 19 Июня 2013, 20:29:02 »
Вот все советуют языки программирования, среды, ИДЕ и т.п. Предлагаю взглянуть на тему под другим углом. А знаете ли вы, что в linux очень много консольных программ с множеством параметров, их совместное использование очень эффективно и напоминает программирование и может помочь в решение нужных и интересных задач в короткие сроки. Вот пример:
1) gnuplot строит графики по файлам данных, математическим фукнциям и способен обрабатывать результаты разных экспериментов и логов
2) sed - консольный редактор, отлично подходит для обработки текстовых файлов
3) latex - не визуальный текстовый редактор.
4) imagemagic - фантастический консольный графический редактор
5) taskjuggler - управление проектами
6) и например bash - язык, с помощью которого можно их всех связать воедино.
Я нашел такое применение этому:
1) gnuplot+sed+latex  = могут генерировать отличную отчетную документацию по логам и файлам данных
2) imagemagic - для пакетной обработки множества картинок.
3) taskjuggler + bash + apache - управление проектами, публикация
Если использовать уже готовые программы то можно быстро достичь результата, при этом не тратя много времени на тестирование.
С уважением, Алексей.
http://tulalinux.ru

Оффлайн quiet_readonly

  • Участник
  • *
  • Сообщений: 133
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #13 : 19 Июня 2013, 20:31:32 »
Проблемы с переносом простых программ на C++ с Windows на Linux возникают по трём причинам:
  • Используются нестандартные библиотечные функции, которых нет в Linux (по крайней мере в стандартном комплекте, а не с winelib).
  • Используются языковые расширения, специфичные для Microsoft
  • Реальные названия файлов и названия, указанные в #include, не совпадают.

Проблемы легче всего решаются использованием Linux и разработкой на нём (в качестве среды советую QtCreator), но можно поступить иначе:
  • Проверять сомнительные функции на cppreference.com, там будет написано, является эта функция нестандартным расширением или нет [1]
  • Языковые расширения можно просто запомнить, но можно поступить иначе: добавить к компилятору дополнительные флаги [2]
  • В Visual Studio шаблоны багнутые: при создании проекта создаётся файл StfAfx.h, а при создании файла сразу подключается файл stdafx.h. Можно просто в ручную поправить имя файла или имя в #include, а можно вспомнить, что в Visual Studio шаблон является просто файлом и его можно отредактировать.

[1] Можно также через winelib использовать winapi на линуксе, но этот подход чреват проблемами.
[2] И clang, и gcc поддерживают флаги "-fdelayed-template-parsing -fms-extensions", их можно добавить в Makefile, или в *.pro в QtCreator:
QMAKE_CXXFLAGS += -fdelayed-template-parsing -fms-extensions
Пользователь решил продолжить мысль 19 Июня 2013, 20:38:40:
А знаете ли вы, что в linux очень много консольных программ с множеством параметров
Только не говорите, что вы эти параметры в ручную пишете. Или что можете правильно и без тестирования распарсить на баше выход одной утилиты и на основе этого сформировать ввод для другой.

Практически всегда использование только консольных инструментов ведёт к лишней работе и требует знания множества неприятных особенностей этих инструментов.
« Последнее редактирование: 19 Июня 2013, 20:38:40 от quiet_readonly »

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7211
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Разработка консольного приложения.
« Ответ #14 : 19 Июня 2013, 20:41:12 »
Alexey_Pr, вы про BASH?

 

Страница сгенерирована за 0.128 секунд. Запросов: 25.