1 | |
Программа на другом компьютере05.08.2009, 01:35. Показов 4835. Ответов 20
Метки нет (Все метки)
Знаю эта тема уже была также пользовался поиском находи но ничего не понял можете подробней рассказать какие файлы нужно переносить на другой комп чтобы программа работала и запускалась нормально ??
0
|
05.08.2009, 01:35 | |
Ответы с готовыми решениями:
20
Программа крашится на другом компьютере Ошибка компиляции на другом компьютере Запуск программы на другом компьютере Release. Работа на другом компьютере |
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
05.08.2009, 08:40 | 2 |
В общем случае нужно сделать инсталлятор.
1
|
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
05.08.2009, 12:35 | 3 |
как сказал odip - сделать инсталлер. Но для инсталлера необходимо узнать, какие файлы требует ваша программа.
Способ 1: Записать ваш исполняемый файл на компьютер со свежеустановленной ОС и запустить его. Как правило, должна вылетить ошибка с указанным в ней именем файла. Ищите файл на своем компьютере и переносите в директорию с вашей программой на другом. Снова запускаете. Смотрите файл -> переносите. И так пока не запустится. Способ 2: Скомпилировать с необходимыми паоаметрами, дабы включить необходимый инструкции из билоиотек в исполняемый файл. Этот шаг индивидуален для каждой среды разработки. Какую ты используешь среду?
1
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|
05.08.2009, 13:14 | 4 |
Лучше использовать компилятор, который создаёт код, не нуждающийся в runtime и дригих, подобных либах!
Я вот не парюсь что вдруг моя прога не запустится на другом компе, т. к. компилятор весь требуемый код добавляет в исполняемый файл, который при этом всё равно остаётся компактным.
1
|
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
05.08.2009, 14:05 | 5 |
Так он и использует. Только выставлен сейчас компилятор на создание исполняемого файла с использованием Runtime.
1
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|
05.08.2009, 14:37 | 7 |
Нет, я не это имел в виду.
Я писал про то, что любой нормальный компилятор должен добавлять в исполняемый файл только используемые функции, а не все подряд. Тогда EXE будет очень компактным (от нескольких КБ) и runtime не понадобятся. Размер исполняемого файла будет непостредственно зависить от размера кода используемых функций.
0
|
05.08.2009, 14:48 | 8 |
Любой нормальный компилятор в исполняемый файл вообще ничего не добавляет, этим занимается линкер. И работает он по стандартным правилам с точностью до модуля. Либо я не так тебя понимаю, а потому приведи нормальный конкретный пример
1
|
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
05.08.2009, 14:56 | 9 |
как сказал Evg для "статического и слинкованого кода" так и есть. Просто раньше большинство программ писались на C++ (это еще до популярности don net) и вливать в каждую программу некоторый код - невыгодно иногда. Проще установить один раз в систему C++ Runtime Redistributive, и экономить место на исполняемых файлах, которые будут черпать нужные им функции из него.
1
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|
05.08.2009, 15:27 | 10 |
Ну перпутал немного но ведь и так понятно что имелось в виду.
Пример - скомпилированая прога с прикреплённом файле. Эта прога, создаёт окно с кнопкой и обрабатывает события этой кнопки. Весит 12КБ. В runtime не нужнадется и будет работать на любом компе если на нём установлена ОС Win98 или более свежая. Для создания окна, кнопки и обработки событий, использованы функции среды, но если бы всё сделать на API, то скомпилированая прога весила примерно 4КБ. Это я к тому, что при сборке исполняемого файла, статически должны быть прилинкованы не все функции, а только нужные, что существенно уменьшит размер исполняемого файла. Это позволит статически прилинковывать runtime библиотеку и при этом размер исполняемого файла будет крохотным, точнее напрямую зависящим от задействованых функий.
2
|
2816 / 1407 / 107
Регистрация: 07.03.2009
Сообщений: 4,446
|
|
05.08.2009, 16:08 | 11 |
а что такое функции среды? это всего лишь обертка для API.
А малый размер - следствие меньшей функциональности среды, так как включается меньше лишнего кода. Если нужен компактный код - используется чистый WinAPI.
1
|
05.08.2009, 16:25 | 12 |
PB, просто я не силён в виндах, но по-моему такая программа будет всё-таки обращаться к динамическим библиотекам. Т.е. код, который находится за рамками твоей программы, в других файлах, но эти файлы являются системными, а потому стандартными. Правда я не знаю, как сие проверять. Программу не смотрел, ибо на работе линух
Весь лишний код тянется от библиотек, сопровождающих компилятор. Это делается для того, чтобы все эти winapi накрыть некоторыми удобными в работе интерфейсами, реализованными в виде классов. Эти библиотеки уже не являются стандартными, а являются так называемой run-time поддержкой компилятора. Поэтому при их использовании и получается тяжёлый код (в случае статической линковки). Ставить работу на winapi как самоцель - по-моему довольно глупое занаятие. Из того же разряда, что и "ассемблер это круто". Да, ты можешьнаписать маленькое приложение. Но более-менее серьёзное приложение для практического применения (а не просто набор кнопок) писать на winapi опухнешь
1
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|
05.08.2009, 16:27 | 13 |
По сути дела да, но эта обёртка позволяет намного быстрее разрабатывать проги.
Но в некоторых средах (непример, дельфи) при создании окна с помощью функций среды, в исполняемый файл добавляется много не используемых функций и в итоге исполняемый файл, создающий постое окно имеет размер больше 200КБ
1
|
05.08.2009, 16:33 | 14 |
Много неиспользуемых функций - это следствие принципов линковки. Попробуй в свою программу добавить какую-нибудь процедуру типа sscanf (название функции условное, ибо не могу конкретно сказать, что именно даст такой эффект) - у тебя в итоговый код подцепится целый паравоз функций, до которых исполнение никогда не дойдёт, но которые требуются для линковки sscanf'а
1
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|
05.08.2009, 16:39 | 15 |
Естественно что к API функциям она обращается. Я про размер runtime библиотек пишу.
Нет проблем. В прикреплённом файле аналогичная прога для Linux. Согласен. Но ведь те 12КБ это при использовании функций среды, т. е. runtime библиотека используется и статически прилинкована. Она имеет размер меньше 10КБ. Её размер напрямую зависит от числа функций, задейстрованых в проге.
1
|
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
|
|
05.08.2009, 16:40 | 16 |
1
|
05.08.2009, 17:11 | 17 |
Линкер нормальный, но в объектном файле (как и в машине вообще) нет понятия процедуры или объекта (оно тольо условное). А есть понятие набора байтов и меток, торчащих в этом наборе
Добавлено через 2 минуты 43 секунды Как и предполагал, речь идёт именно и динамических библиотеках. Удалю с машины libpng12.so.0 (ибо она не есть "стандартная") - код перестанет запускаться. ТОчно так же ты можешь борландовски dll'ки скопировать в системные каталоги и у тебя получится точно такой же "переносимый" бинарник
1
|
7175 / 3234 / 81
Регистрация: 17.06.2009
Сообщений: 14,164
|
|
05.08.2009, 21:46 | 18 |
Добавлено через 6 минут 27 секунд Например берем файл msvcr80.dll Можно его скопировать в каталог к exe-файлу, но эта dll так и не будет использоваться ! Для интереса можете поискать где в каталоге C:\WINDOWS\ находится файл msvcr80.dll. Его либо вообще там не будет, либо будет лежать где-то в C:\WINDOWS\WinSxS\... Если программа использует такие dll-ки, то нужно либо писать специальный инсталлятор, либо ставить в систему runtime для VS2005 (еще есть для VS2008) - он раздается на сайте microsoft, либо предупредить пользователя, что нужно поставить этот runtime.
1
|
0 / 0 / 0
Регистрация: 21.01.2013
Сообщений: 2
|
||||||
21.01.2013, 14:58 | 19 | |||||
Подскажи пожалуйста, если можешь дать исходник, как ты скомпилировал эту программу.
Я создал ПУСТОЙ c++->win32->Проект Win32 под visual studio 2012. Добавил файл file.cpp с кодом
Изменял свойства проекта: Убрал набор символов Unicode что бы программа компилировалась набор инструментов платформы visual studio 2012 - Windows XP что бы в winxp запускалось Библиотека времени выполнения /MT что бы без 110dll Вот что вышло Win32Project1.zip
0
|
Brainsbreaker
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
|
|
22.01.2013, 01:26 | 20 |
mishvecov, он пишет на Pure Basic'е, это не то. По твоему коду исходнику 800 байтов размер будет.
Минимальный размер EXE файла PE формата. Читай внимательно и гугли, удачи.
1
|
22.01.2013, 01:26 | |
22.01.2013, 01:26 | |
Помогаю со студенческими работами здесь
20
Как запустить программу на другом компьютере? Не могу открыть программу на другом компьютере Создание приложения, работающего на другом компьютере Запуск консольного приложения на другом компьютере Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |