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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.64
pigah
 Аватар для pigah
12 / 12 / 2
Регистрация: 05.07.2009
Сообщений: 147
Записей в блоге: 1
#1

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

05.08.2009, 01:35. Просмотров 2700. Ответов 20
Метки нет (Все метки)

Знаю эта тема уже была также пользовался поиском находи но ничего не понял можете подробней рассказать какие файлы нужно переносить на другой комп чтобы программа работала и запускалась нормально ??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2009, 01:35     Программа на другом компьютере
Посмотрите здесь:

C++ Программа работает только на моем компьютере
Как запустить программу на другом компьютере? C++
C++ Чтение файла exe на другом компьютере, где нет Visual
Release. Работа на другом компьютере C++
C++ Ошибка компиляции на другом компьютере
Как одному классу узнать о другом в другом файле, если они не имеют общего наследования C++
C++ Ошибка при запуске программы на другом компьютере
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
05.08.2009, 08:40     Программа на другом компьютере #2
В общем случае нужно сделать инсталлятор.
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 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
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
05.08.2009, 14:05     Программа на другом компьютере #5
Цитата Сообщение от PB Посмотреть сообщение
Лучше использовать компилятор, который создаёт код, не нуждающийся в runtime и дригих, подобных либах!
Так он и использует. Только выставлен сейчас компилятор на создание исполняемого файла с использованием Runtime.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17194 / 5448 / 337
Регистрация: 30.03.2009
Сообщений: 14,806
Записей в блоге: 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
Эксперт CАвтор FAQ
 Аватар для Evg
17194 / 5448 / 337
Регистрация: 30.03.2009
Сообщений: 14,806
Записей в блоге: 26
05.08.2009, 14:48     Программа на другом компьютере #8
Любой нормальный компилятор в исполняемый файл вообще ничего не добавляет, этим занимается линкер. И работает он по стандартным правилам с точностью до модуля. Либо я не так тебя понимаю, а потому приведи нормальный конкретный пример
Monte-Cristo
 Аватар для Monte-Cristo
2807 / 1372 / 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
2807 / 1372 / 30
Регистрация: 07.03.2009
Сообщений: 4,446
05.08.2009, 16:08     Программа на другом компьютере #11
Цитата Сообщение от PB Посмотреть сообщение
использованы функции среды
а что такое функции среды? это всего лишь обертка для API.
А малый размер - следствие меньшей функциональности среды, так как включается меньше лишнего кода. Если нужен компактный код - используется чистый WinAPI.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17194 / 5448 / 337
Регистрация: 30.03.2009
Сообщений: 14,806
Записей в блоге: 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
Эксперт CАвтор FAQ
 Аватар для Evg
17194 / 5448 / 337
Регистрация: 30.03.2009
Сообщений: 14,806
Записей в блоге: 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
Эксперт CАвтор FAQ
 Аватар для Evg
17194 / 5448 / 337
Регистрация: 30.03.2009
Сообщений: 14,806
Записей в блоге: 26
05.08.2009, 17:11     Программа на другом компьютере #17
Цитата Сообщение от PB Посмотреть сообщение
Вот про это я и пишу.
Неужели нельзя сделать нормальный линкер?
Линкер нормальный, но в объектном файле (как и в машине вообще) нет понятия процедуры или объекта (оно тольо условное). А есть понятие набора байтов и меток, торчащих в этом наборе

Добавлено через 2 минуты 43 секунды
Цитата Сообщение от PB Посмотреть сообщение
Нет проблем.
В прикреплённом файле аналогичная прога для Linux.
Как и предполагал, речь идёт именно и динамических библиотеках. Удалю с машины libpng12.so.0 (ибо она не есть "стандартная") - код перестанет запускаться. ТОчно так же ты можешь борландовски dll'ки скопировать в системные каталоги и у тебя получится точно такой же "переносимый" бинарник
odip
Эксперт С++
 Аватар для odip
7151 / 3291 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
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++ Exe-файл не работает на другом компьютере
C++ Русские символы в консоли на другом компьютере
C++ Запуск программы на другом компьютере
C++ Программа крашится на другом компьютере
Программа со строками, в одном виде работает, в другом нет C++

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

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

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