Как написать кросс-платформенную программу?
Привет,
Я хочу написать небольшую кросс-платформенную утилиту с графическим интерфейсом. На какой язык/GUI-библиотеку я должен придерживаться? Возможно ли это вообще?
Это будет небольшая программа, поэтому я не хочу, чтобы люди загружали JVM или .NET Framework. Возможно ли разработать его изначально?
Обновление 1.
Под "изначально" я подразумеваю, что конечным результатом будет собственный код без промежуточных уровней, таких как Java Virtual Machine или .NET Common Language Runtime
Обновление 2.
Предпочтительное БЕСПЛАТНОЕ решение;)
Ответы
Ответ 1
Если вы знаете C или С++, то первая инфраструктура графического интерфейса Cross Platform, о которой я могу думать, это:
- QT (С++, проприетарный, но бесплатный с лицензией LGPL)
- wxWidgets (С++, самый полный и стабильный, но также огромный)
- FLTK (С++)
- FOX (С++)
- IUP (C, проще и чище, чем выше)
Если вы знаете Pascal, вы можете попробовать freepascal + Lazarus. Я никогда не использовал его.
Ответ 2
Проблема заключается в следующем: если вы не хотите иметь графический интерфейс, но не хотите, чтобы пользователь загружал вечный API, платформу или виртуальную машину для ее запуска, будь то TCL/TK, Java или QT и т.д. то вы быстро теряетесь.
Причина в следующем: вам нужно будет перестроить все функциональные возможности (GUI), которые API, каркасы и виртуальные машины предоставляют вам независимость от платформы. И это много работы, чтобы сделать....
С другой стороны: виртуальная машина Java установлена практически на любой операционной системе с нуля, почему бы не дать этому снимку?
Ответ 3
Вы хотите разработать кросс-платформенную программу изначально? Э... Я не думаю, что это сработает, главным образом потому, что эта фраза - парадокс. Если вы пишете собственный код, он по самой своей природе будет работать только на платформе, для которой вы его запрограммировали.;-) Это то, о чем все Framework.
Итак, вместо этого вы должны использовать очень тонкую структуру, если ваша программа будет такой маленькой. его возможная идея Qt является возможностью.
Ответ 4
WxWindows? О, он теперь называется WxWidgets: http://www.wxwidgets.org/
Ответ 5
wxWidgets имеет привязки ко всем типам языков - например, python, если ваше приложение достаточно мало.
Ответ 6
Лазарь велик. GTK2 на Linux, win32/64 на Windows, WINCE на euh, Wince. Он даже использует Carbon на Mac (работает на COCOA). Также легко продать вашему боссу (код совместим с Delphi)
Ответ 7
Как насчет Python с использованием Qt или Wx, а затем с помощью PythonToExe сделать "распространяемый"
Мысль будет связана с разработкой, чтобы гарантировать, что не используются собственные функции (например, реестр и т.д.). Такие вещи, как разрывы строк в текстовых файлах, будут иметь разные escape-символы, поэтому их нужно будет обрабатывать
Ответ 8
Какую ОС вы имеете в виду, когда говорите кросс-платформу?
Как правильно указывает Epaga, родные и кросс-платформенные взаимоисключающие. Вы можете либо написать несколько версий, которые запускаются изначально на нескольких платформах, либо вам нужно использовать кросс-платформенную структуру.
В случае межплатформенного рамочного подхода всегда потребуются дополнительные установки. Например, многие из них предлагают использовать Python и одну из его фреймворков. Это потребовало бы указания людям установить python - и, возможно, фреймворк - сначала.
Если вы нацелены на Windows и OS X (и готовы экспериментировать с кодом alpha-release для Linux, если требуется поддержка этой ОС), я настоятельно рекомендую вам взглянуть на использование Adobe AIR для кросс- приложений графического интерфейса платформы.
Ответ 9
Я согласен с Георгием, Java - это путь. С небольшим количеством работы вы можете заставить настольное приложение работать как апплет Java (так что пользователям вообще не нужно вообще ничего загружать). См. http://www.geogebra.org в качестве примера приложения с плавными запусками как кросс-платформенное Java-приложение И имеет простой порт для веб-апплета.
Два других преимущества использования Java:
- У них есть обширные библиотеки для создания пользовательского интерфейса, включая компоненты компонентов пользовательского интерфейса.
- Рамка времени выполнения Java обычно обновляется автоматически для пользователя.
Один недостаток:
- Версия Java, установленная на вашем компьютере конечных пользователей, может быть не полностью совместима с вашим приложением, требуя от вас кода с наименьшим вероятным знаменателем.
Ответ 10
Попробуйте RealBasic. Синтаксис Visual Basic, предназначенный для Win32, OS X и Linux. Я не знаю никаких подробностей о настройке Linux, но для любой кросс-платформенной разработки, которую я делал между Win32 и OS X, это был сон.
http://www.realbasic.com
Изменить: создает собственные исполняемые файлы. Существует небольшая стоимость - 100 долларов.
Ответ 11
Вы посмотрели Qt?
Ответ 12
Флэш? Он установлен почти везде.
Ответ 13
Если "HAS" используется для работы с рабочим столом Qt. Ничто не сравнится с этим прямо сейчас.
Однако лично я отказался от работы на настольном компьютере, и любой проект, основанный на пользовательском интерфейсе, я обычно использую браузер/сервер. Вы можете легко написать небольшой пользовательский сервер, который прослушивает какой-то порт, чтобы программа могла запускаться локально, при этом пользователям не нужно было устанавливать Apache или иметь доступ к сети. У меня есть небольшая структура Lua, Python и С++, которую я сделал для этой цели (хотите добавить Javascript для бэкэнд с V8:)
Ответ 14
Если вы посмотрите на Qt и WxWidgets, не забудьте также проверить GTK +!
Ответ 15
Я согласен с Дэвидом Висом и Георгием,
Java - это кросс-платформенность par excellence. Вы буквально пишете один раз и бегаете повсюду. Без необходимости компиляции кода для каждой целевой ОС или битности, не беспокойтесь о связи с чем-либо и т.д.
Единственное, как вы указали, - установить JRE, но это быстро и просто сделать даже для начинающих конечных пользователей (это вопрос нажатия "Далее > " несколько раз в установщике).
И с развертыванием Java Web Start становится еще проще: пользователь просто нажимает кнопку запуска на веб-странице и запускает приложение (если подходящая JVM установлена в соответствии с тем, что указано в дескрипторе JNLP) или пользователь перенаправляется на Страница загрузки Java (если подходящая JVM не найдена).