С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
AleksyVB
6 / 6 / 1
Регистрация: 10.12.2013
Сообщений: 135
#1

Переносимость программы, куча dll и кроссплатформенность - C++

08.05.2014, 11:24. Просмотров 930. Ответов 20
Метки нет (Все метки)

Решил пощупать С++ и Qt после C#.

Создал простейшее консольное приложение и оконное Qt. В итоге, что бы приложение открылось вне IDE Qt пришлось скопировать в папку с программой dll для консольного приложения на 1мб+, для оконного на 350мб+.

При переносе приложения на другие компьютеры вместе с этой кучей dll консольное приложение работает, а вот оконное нет, выдает Microsoft Visual C++ Runtime Library - This app has requested the Runtime to terminate it in an unusual way. VC++ redistribut требует?

Если надо таскать dll на 300+ мб то чем это отличается от framework тогда? Наверно их вшить в приложения можно, но в любом случае программа сильно увеличится в размерах.

К тому же, как я правильно понял в идеале надо перекомпилировать программу под каждый процессор и ОС отдельно, причем если для виндуса может быть перенос копи пастом сработать, то для линукса нужно полюбому перекомпилировать программу(что бы она работала без wine), в связи с этим сильно разочаровался, так как под кросплатформенностью я понимал простой перенос программы на любую ОС, на любой проц. Лично проверял, что программы, созданные под .Net спокойно работают в Linux без wine под mono.

В чем преимущество C++ тогда, в быстродействие самой программы на доли секунды, что не будет заметно невооруженном глазом? Низкий уровень не нужен, нужна реализация Gui для сотрудников офисов и т.д.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2014, 11:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переносимость программы, куча dll и кроссплатформенность (C++):

Переносимость программы в семействе windows - C++
Ранее писал программу на visual 2010 и windows 7, затем перешел на visual 2013 и windows 8.1. И теперь выскакивает вот такая ошибка: ...

Отладка программы, куча ошибок - C++
помогите отладить плиз вот задание Определить пользовательский класс в соответствии с вариантом задания. Определить в классе...

C++ и кроссплатформенность - C++
Здравствуйте! есть небольшой код на плюсах, необходимо, чтобы он был кроссплатформенный. Реально ли это? Как это сделать, если у меня...

Кроссплатформенность... - C++
Привет всем! Необходимо написать некое графическое приложение, при этом оно должно быть кроссплатформенными и API-независимым. Как я...

Кроссплатформенность и мультимедиа-библиотеки - C++
Вопрос первый. Решил с другом сделать маленький проект для облегчения обучения английского а именно увеличение словарного запаса. Решили...

Переносимость - C++
Всем доброе время суток! Мне нужно написать программу, которая будет запускаться на любой ОС. как это можно реализовать? Я думаю ее...

20
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
08.05.2014, 11:29 #2
Цитата Сообщение от AleksyVB Посмотреть сообщение
350мб+
Юзайте Qt 4.8 и компильте в релиз. Вес получится ~20 мбайт.
+можете UPX'ом сжать.
Цитата Сообщение от AleksyVB Посмотреть сообщение
чем это отличается от framework
Таки Qt и есть framework.
Цитата Сообщение от AleksyVB Посмотреть сообщение
К тому же, как я правильно понял в идеале надо перекомпилировать программу под каждый процессор и ОС отдельно
ОС - да, процессор - ну разве что если вы про Android.
Но (!) код менять не придется, просто нужно будет скомпилировать под конкретную платформу, ибо форматы исполняемых файлов у всех разные.
Цитата Сообщение от AleksyVB Посмотреть сообщение
В чем преимущество C++ тогда, в быстродействие самой программы на доли секунды, что не будет заметно невооруженном глазом?
Это уже тема для целой дискуссии. У C++ есть достаточно преимуществ. Производительность, стабильность лишь немногие из них.
Только вот C++ не может в GUI и это печально.


И вы пишете не в тот раздел, тут есть целый раздел, посвященный Qt.
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
08.05.2014, 11:34 #3
Вот вам либы на Qt4 (core, gui и mingw'шные). Сжаты UPX'ом с --ultra-brute
upx.7z
0
newbie666
Заблокирован
08.05.2014, 11:40 #4
Цитата Сообщение от MastAKK Посмотреть сообщение
Только вот C++ не может в GUI
Это у нубов не может, а так то есть DirectX под Windows или же OpenGL для кроссовости.
Цитата Сообщение от AleksyVB Посмотреть сообщение
Наверно их вшить в приложения можно
можно - статическая линковка называется (тот ещё геморой)
Цитата Сообщение от AleksyVB Посмотреть сообщение
но в любом случае программа сильно увеличится в размерах
не сильно, но увеличится
Цитата Сообщение от AleksyVB Посмотреть сообщение
для оконного на 350мб+.
ты что сбрендил? :-)
С собой надо таскать столько DLL-к, сколько ты модулей подключил, ну и плюс там парочка системных
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
08.05.2014, 11:42 #5
Цитата Сообщение от AleksyVB Посмотреть сообщение
их вшить в приложения можно
Конечно, это называется статической линковкой. Только вот там есть некоторые ограничения, точно уже не помню, но лицензия чего-то требует, если будешь линковать статически.
Цитата Сообщение от AleksyVB Посмотреть сообщение
программа сильно увеличится в размерах.
Будет весить ~20 мбайт +-
Посмотрите на скайп. Насколько мне известно, он написан с использованием Qt. Если откроете папку со скайпом, то увидите лишь Skype.exe, который весит 20 мбайт. Вот вам и статическая линковка.

Добавлено через 1 минуту
Цитата Сообщение от newbie666 Посмотреть сообщение
ты что сбрендил? :-)
вероятно, он полностью скопировал папку с dll
Цитата Сообщение от newbie666 Посмотреть сообщение
Это у нубов не может
Это у всех не может. Я говорил про чистый C++ без доп.фреймворков и библиотек.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
08.05.2014, 11:43 #6
Цитата Сообщение от AleksyVB Посмотреть сообщение
нужно полюбому перекомпилировать программу
а что Вы хотели от нативных приложений?
Цитата Сообщение от AleksyVB Посмотреть сообщение
В чем преимущество C++ тогда, в быстродействие самой программы на доли секунды, что не будет заметно невооруженном глазом? Низкий уровень не нужен, нужна реализация Gui для сотрудников офисов и т.д.
у каждого языка своя сфера применения, да и одно и тоже написать можно по разному.
0
newbie666
Заблокирован
08.05.2014, 11:43 #7
Цитата Сообщение от MastAKK Посмотреть сообщение
но лицензия чего-то требует
Ну если тебя волнуют правила, то для статической линковки нужна коммерческая лицензия.
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
08.05.2014, 11:47 #8
Про скайп ошибся, на Qt он написан лишь для линукса

Добавлено через 3 минуты
Цитата Сообщение от newbie666 Посмотреть сообщение
для статической линковки нужна коммерческая лицензия
Кхм... У нас LGPL v2 давно
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
08.05.2014, 11:52 #9
Цитата Сообщение от AleksyVB Посмотреть сообщение
В чем преимущество C++ тогда, в быстродействие самой программы на доли секунды, что не будет заметно невооруженном глазом?
Во-первых неоптимальный код может работать и в десятки раз медленнее оптимального, а есть проги, которые работают не доли секунды в обоих случаях, а заметно дольше. И если у тебя оптимальный код требует 44-х минут, то не оптимальный, который в 36 раз медленнее, потребует уже 26 часов 24 минуты, то есть 1 сутки 2 часа 24 минуты. А если в 50 раз? Тогда уже 36 часов 40 минут, то есть 1 сутки 12 часов 40 минут. А если ещё не оптимальнее? Хотя врядли другие компилируемые в натив языки способны без пессимизации исходника и алгоритма производить на столько не оптимальный код, но я сам видел интерпретатор, работавший мало того, что в 50 раз медленнее натива, так ещё и в лучшем случае. А в худшем во многие тысячи раз. А во-вторых qt - это и есть фреймвок.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
08.05.2014, 11:58 #10
Цитата Сообщение от taras atavin Посмотреть сообщение
А во-вторых qt - это и есть фреймвок.
Думаю, имеется ввиду чем Qt отличается от .Net Framework, просто не все знают, что есть и другие Framework'и, а не только .Net
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
08.05.2014, 12:00 #11
Ну и ни какое приложение не сможет работать абсолютно на любой платформе. Начиная с того, что другой процессор может не поддерживать коды операций и заканчивая несовместимым форматом исполняемого файла. Даже если к системным функциям не обращаться, разные процессоры могут вообще не иметь совпадающих кодов операций, а разные операционные системы не поддерживать ни одного совпадающего формата исполняемого файла. Да и неиспользование системных функция маловероятно из-за контроля доступа к ресурсам. По-настоящему кросплатформенная порграмма - это всегда программа, имеющая версии, совместимые с разными платформами, но при этом имеющие в точности совпадающий интерфейс и функционал. И mono здесь не аргумент: на какой нибудь системе его может не быть, или он окажется не той версии и прювет лунатикам. Нэтовые проги с винды на винду отлично не переносятся даже с бубном.
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
08.05.2014, 12:02 #12
Цитата Сообщение от taras atavin Посмотреть сообщение
ни какое приложение не сможет работать абсолютно на любой платформе
Java? У них свой формат и своя VM, но всё равно - один раз скомпилил на любой платформе - запустится на любой платформе, поддерживающей Java, на которая установлена оная.

Не по теме:

Не люблю Java =/

0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
08.05.2014, 12:06 #13
Цитата Сообщение от MastAKK Посмотреть сообщение
один раз скомпилил на любой платформе - запустится на любой платформе
Не нужно путать нативный код с промежуточным, который будет выполнятся с помощью какой-то платформы.
0
MastAKK
145 / 136 / 12
Регистрация: 13.10.2012
Сообщений: 592
08.05.2014, 12:07 #14
Croessmah, а, ну раз мы про нативные, тогда да. Тут даже глупо спорить.
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
08.05.2014, 12:08 #15
Цитата Сообщение от MastAKK Посмотреть сообщение
ОС - да, процессор - ну разве что если вы про Android.
Так и запишем: про итаниум, RISC и z-80 не слышал. Кстати, под достаточно ресурсоёмкое приложение можно найти процессор, который его тупо не потянет, стоя не в телефоне, а в компе. И перекомпилировать будет бесполезно.

Добавлено через 46 секунд
Цитата Сообщение от MastAKK Посмотреть сообщение
Java? У них свой формат и своя VM, но всё равно - один раз скомпилил на любой платформе - запустится на любой платформе, поддерживающей Java, на которая установлена оная.
А ничего, что можно найти платформу, для которой нет java-машины?
0
08.05.2014, 12:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2014, 12:08
Привет! Вот еще темы с ответами:

модули.переносимость - C++
модуль в языке СИ? не могу нигде ничего найти про них.может кто-нибудь подскажет в каком учебнике искать или напишет что ЭТО??? и ещё...

Кто может поделиться файлами ogg.dll, vorbis.dll и vorbisfile.dll - 32-х и 64-битными версиями? - C++
Движок перевожу на платформу Win64 и нужно, чтобы разрядность ЕХЕ и DLL совпадали, а в интернете искал 64-битные версии ogg.dll, vorbis.dll...

dll программы для поиска Outlook - C++
Privet. Nugen sovet. Pishu installyaziu dlya moey dll, programmka budet iskat' Outlook i kopirovat' v tu ge papku mou dll. Eto v prinzipe...

Взаимодействие cpp-dll и delphi-программы - C++
Есть программа, написанная на делфи, а также две длл: одна на с++, другая на делфи. Программа передает параметр - указатель packed...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.