Форум программистов, компьютерный форум CyberForum.ru

Программа на другом компьютере - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.64
pigah
 Аватар для pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
05.08.2009, 01:35     Программа на другом компьютере #1
Знаю эта тема уже была также пользовался поиском находи но ничего не понял можете подробней рассказать какие файлы нужно переносить на другой комп чтобы программа работала и запускалась нормально ??
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
05.08.2009, 08:40     Программа на другом компьютере #2
В общем случае нужно сделать инсталлятор.
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
05.08.2009, 12:35     Программа на другом компьютере #3
как сказал odip - сделать инсталлер. Но для инсталлера необходимо узнать, какие файлы требует ваша программа.

Способ 1:
Записать ваш исполняемый файл на компьютер со свежеустановленной ОС и запустить его. Как правило, должна вылетить ошибка с указанным в ней именем файла. Ищите файл на своем компьютере и переносите в директорию с вашей программой на другом. Снова запускаете. Смотрите файл -> переносите. И так пока не запустится.

Способ 2:
Скомпилировать с необходимыми паоаметрами, дабы включить необходимый инструкции из билоиотек в исполняемый файл. Этот шаг индивидуален для каждой среды разработки. Какую ты используешь среду?
PB
Просто прогер
1277 / 1064 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
05.08.2009, 13:14     Программа на другом компьютере #4
Лучше использовать компилятор, который создаёт код, не нуждающийся в runtime и дригих, подобных либах!
Я вот не парюсь что вдруг моя прога не запустится на другом компе, т. к. компилятор весь требуемый код добавляет в исполняемый файл, который при этом всё равно остаётся компактным.
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
05.08.2009, 14:05     Программа на другом компьютере #5
Цитата Сообщение от PB Посмотреть сообщение
Лучше использовать компилятор, который создаёт код, не нуждающийся в runtime и дригих, подобных либах!
Так он и использует. Только выставлен сейчас компилятор на создание исполняемого файла с использованием Runtime.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,128
Записей в блоге: 26
05.08.2009, 14:23     Программа на другом компьютере #6
Цитата Сообщение от PB Посмотреть сообщение
Лучше использовать компилятор, который создаёт код, не нуждающийся в runtime и дригих, подобных либах!
Правильнее было бы сказать "использовать настройки, при которых..." ибо все компиляторы умеют строить статически слинкованный код
PB
Просто прогер
1277 / 1064 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
05.08.2009, 14:37     Программа на другом компьютере #7
Цитата Сообщение от Evg Посмотреть сообщение
"использовать настройки, при которых..." ибо все компиляторы умеют строить статически слинкованный код
Нет, я не это имел в виду.
Я писал про то, что любой нормальный компилятор должен добавлять в исполняемый файл только используемые функции, а не все подряд.
Тогда EXE будет очень компактным (от нескольких КБ) и runtime не понадобятся.
Размер исполняемого файла будет непостредственно зависить от размера кода используемых функций.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,128
Записей в блоге: 26
05.08.2009, 14:48     Программа на другом компьютере #8
Любой нормальный компилятор в исполняемый файл вообще ничего не добавляет, этим занимается линкер. И работает он по стандартным правилам с точностью до модуля. Либо я не так тебя понимаю, а потому приведи нормальный конкретный пример
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
05.08.2009, 14:56     Программа на другом компьютере #9
Цитата Сообщение от PB Посмотреть сообщение
любой нормальный компилятор должен добавлять в исполняемый файл только используемые функции
как сказал Evg для "статического и слинкованого кода" так и есть. Просто раньше большинство программ писались на C++ (это еще до популярности don net) и вливать в каждую программу некоторый код - невыгодно иногда. Проще установить один раз в систему C++ Runtime Redistributive, и экономить место на исполняемых файлах, которые будут черпать нужные им функции из него.
PB
Просто прогер
1277 / 1064 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
05.08.2009, 15:27     Программа на другом компьютере #10
Цитата Сообщение от Evg Посмотреть сообщение
Любой нормальный компилятор в исполняемый файл вообще ничего не добавляет, этим занимается линкер
Ну перпутал немного но ведь и так понятно что имелось в виду.


Цитата Сообщение от Evg Посмотреть сообщение
приведи нормальный конкретный пример
Пример - скомпилированая прога с прикреплённом файле.
Эта прога, создаёт окно с кнопкой и обрабатывает события этой кнопки.
Весит 12КБ.
В runtime не нужнадется и будет работать на любом компе если на нём установлена ОС Win98 или более свежая.
Для создания окна, кнопки и обработки событий, использованы функции среды, но если бы всё сделать на API, то скомпилированая прога весила примерно 4КБ.
Это я к тому, что при сборке исполняемого файла, статически должны быть прилинкованы не все функции, а только нужные, что существенно уменьшит размер исполняемого файла.
Это позволит статически прилинковывать runtime библиотеку и при этом размер исполняемого файла будет крохотным, точнее напрямую зависящим от задействованых функий.
Вложения
Тип файла: rar Button_Windows.rar (5.8 Кб, 29 просмотров)
Monte-Cristo
 Аватар для Monte-Cristo
2805 / 1370 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
05.08.2009, 16:08     Программа на другом компьютере #11
Цитата Сообщение от PB Посмотреть сообщение
использованы функции среды
а что такое функции среды? это всего лишь обертка для API.
А малый размер - следствие меньшей функциональности среды, так как включается меньше лишнего кода. Если нужен компактный код - используется чистый WinAPI.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,128
Записей в блоге: 26
05.08.2009, 16:25     Программа на другом компьютере #12
PB, просто я не силён в виндах, но по-моему такая программа будет всё-таки обращаться к динамическим библиотекам. Т.е. код, который находится за рамками твоей программы, в других файлах, но эти файлы являются системными, а потому стандартными. Правда я не знаю, как сие проверять. Программу не смотрел, ибо на работе линух

Весь лишний код тянется от библиотек, сопровождающих компилятор. Это делается для того, чтобы все эти winapi накрыть некоторыми удобными в работе интерфейсами, реализованными в виде классов. Эти библиотеки уже не являются стандартными, а являются так называемой run-time поддержкой компилятора. Поэтому при их использовании и получается тяжёлый код (в случае статической линковки).

Ставить работу на winapi как самоцель - по-моему довольно глупое занаятие. Из того же разряда, что и "ассемблер это круто". Да, ты можешьнаписать маленькое приложение. Но более-менее серьёзное приложение для практического применения (а не просто набор кнопок) писать на winapi опухнешь
PB
Просто прогер
1277 / 1064 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
05.08.2009, 16:27     Программа на другом компьютере #13
Цитата Сообщение от Monte-Cristo Посмотреть сообщение
а что такое функции среды? это всего лишь обертка для API.
По сути дела да, но эта обёртка позволяет намного быстрее разрабатывать проги.
Но в некоторых средах (непример, дельфи) при создании окна с помощью функций среды, в исполняемый файл добавляется много не используемых функций и в итоге исполняемый файл, создающий постое окно имеет размер больше 200КБ
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,128
Записей в блоге: 26
05.08.2009, 16:33     Программа на другом компьютере #14
Много неиспользуемых функций - это следствие принципов линковки. Попробуй в свою программу добавить какую-нибудь процедуру типа sscanf (название функции условное, ибо не могу конкретно сказать, что именно даст такой эффект) - у тебя в итоговый код подцепится целый паравоз функций, до которых исполнение никогда не дойдёт, но которые требуются для линковки sscanf'а
PB
Просто прогер
1277 / 1064 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
05.08.2009, 16:39     Программа на другом компьютере #15
Цитата Сообщение от Evg Посмотреть сообщение
по-моему такая программа будет всё-таки обращаться к динамическим библиотекам
Естественно что к API функциям она обращается. Я про размер runtime библиотек пишу.

Цитата Сообщение от Evg Посмотреть сообщение
Правда я не знаю, как сие проверять. Программу не смотрел, ибо на работе линух
Нет проблем.
В прикреплённом файле аналогичная прога для Linux.


Цитата Сообщение от Evg Посмотреть сообщение
Да, ты можешь написать маленькое приложение. Но более-менее серьёзное приложение для практического применения (а не просто набор кнопок) писать на winapi опухнешь
Согласен.
Но ведь те 12КБ это при использовании функций среды, т. е. runtime библиотека используется и статически прилинкована. Она имеет размер меньше 10КБ. Её размер напрямую зависит от числа функций, задейстрованых в проге.
Вложения
Тип файла: rar Button_Linux.rar (9.8 Кб, 16 просмотров)
PB
Просто прогер
1277 / 1064 / 11
Регистрация: 13.03.2009
Сообщений: 2,502
05.08.2009, 16:40     Программа на другом компьютере #16
Цитата Сообщение от Evg Посмотреть сообщение
Много неиспользуемых функций - это следствие принципов линковки
Вот про это я и пишу.
Неужели нельзя сделать нормальный линкер?
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,128
Записей в блоге: 26
05.08.2009, 17:11     Программа на другом компьютере #17
Цитата Сообщение от PB Посмотреть сообщение
Вот про это я и пишу.
Неужели нельзя сделать нормальный линкер?
Линкер нормальный, но в объектном файле (как и в машине вообще) нет понятия процедуры или объекта (оно тольо условное). А есть понятие набора байтов и меток, торчащих в этом наборе

Добавлено через 2 минуты 43 секунды
Цитата Сообщение от PB Посмотреть сообщение
Нет проблем.
В прикреплённом файле аналогичная прога для Linux.
Как и предполагал, речь идёт именно и динамических библиотеках. Удалю с машины libpng12.so.0 (ибо она не есть "стандартная") - код перестанет запускаться. ТОчно так же ты можешь борландовски dll'ки скопировать в системные каталоги и у тебя получится точно такой же "переносимый" бинарник
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
05.08.2009, 21:46     Программа на другом компьютере #18
ты можешь борландовски dll'ки скопировать в системные каталоги и у тебя получится точно такой же "переносимый" бинарник


Добавлено через 6 минут 27 секунд
Ищите файл на своем компьютере и переносите в директорию с вашей программой на другом. Снова запускаете. Смотрите файл -> переносите. И так пока не запустится.
Это все было верно до появления Visual Studio 2005 и ее runtime библиотек.
Например берем файл msvcr80.dll
Можно его скопировать в каталог к exe-файлу, но эта dll так и не будет использоваться !
Для интереса можете поискать где в каталоге C:\WINDOWS\ находится файл msvcr80.dll. Его либо вообще там не будет, либо будет лежать где-то в C:\WINDOWS\WinSxS\...
Если программа использует такие dll-ки, то нужно либо писать специальный инсталлятор, либо ставить в систему runtime для VS2005 (еще есть для VS2008) - он раздается на сайте microsoft, либо предупредить пользователя, что нужно поставить этот runtime.
mishvecov
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 2
21.01.2013, 14:58     Программа на другом компьютере #19
Цитата Сообщение от PB Посмотреть сообщение
Ну перпутал немного но ведь и так понятно что имелось в виду.


Пример - скомпилированая прога с прикреплённом файле.
Эта прога, создаёт окно с кнопкой и обрабатывает события этой кнопки.
Весит 12КБ.
В runtime не нужнадется и будет работать на любом компе если на нём установлена ОС Win98 или более свежая.
Для создания окна, кнопки и обработки событий, использованы функции среды, но если бы всё сделать на API, то скомпилированая прога весила примерно 4КБ.
Это я к тому, что при сборке исполняемого файла, статически должны быть прилинкованы не все функции, а только нужные, что существенно уменьшит размер исполняемого файла.
Это позволит статически прилинковывать runtime библиотеку и при этом размер исполняемого файла будет крохотным, точнее напрямую зависящим от задействованых функий.
Подскажи пожалуйста, если можешь дать исходник, как ты скомпилировал эту программу.

Я создал ПУСТОЙ c++->win32->Проект Win32 под visual studio 2012. Добавил файл file.cpp с кодом
C++
1
2
3
4
5
6
7
#include <windows.h>
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK);
    return 0;
}
Скомпилировал и выполнил У меня получился файл 58 Кб. Твой же весит 13Кб.
Изменял свойства проекта:
Убрал набор символов Unicode что бы программа компилировалась
набор инструментов платформы visual studio 2012 - Windows XP что бы в winxp запускалось
Библиотека времени выполнения /MT что бы без 110dll

Вот что вышло
Win32Project1.zip
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2013, 01:26     Программа на другом компьютере
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Digit@ll
Brainsbreaker
 Аватар для Digit@ll
832 / 343 / 27
Регистрация: 01.02.2011
Сообщений: 1,483
22.01.2013, 01:26     Программа на другом компьютере #20
mishvecov, он пишет на Pure Basic'е, это не то. По твоему коду исходнику 800 байтов размер будет.
Минимальный размер EXE файла PE формата. Читай внимательно и гугли, удачи.
Yandex
Объявления
22.01.2013, 01:26     Программа на другом компьютере
Ответ Создать тему
Опции темы

Текущее время: 01:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru